Iniciador del debate
ele
(@luishgc93)
alguna ayuda 🙁 ?? @lgrusin
-
Esta respuesta fue modificada hace 5 años por
ele.
¿Exactamente qué quieres cambiar y dónde?
No sé si te has dado cuenta pero eso de estar recorriendo todos los productos cada vez que quieras personalizar uno ralentiza que no veas…
Iniciador del debate
ele
(@luishgc93)
@lgrusin gracias por contestarr 😀
quiero cambiar el texto de arriba del todo de la pagina de pago : Detalles de facturación
y el de : Tu pedido
Para los productos gratuitos, ya que no tiene sentido mostrar ese texto cuando no se paga nada… y me gustaría mostrar otro texto.
Encontré este código pero claro, afecta a todos los productos… y yo solo lo quiero para los gratuitos o para los que yo elija por ID.
El tema de la ralentización no habría problema 🙂
//Textos traducidos a medida
add_filter( 'gettext', 'wps_translate_words_array' );
add_filter( 'ngettext', 'wps_translate_words_array' );
function wps_translate_words_array( $translated ) {
$words = array(
// 'palabra a traducir' = > 'traducción'
'Entradas' => 'Noticias',
'Entrada' => 'Noticia',
'Comenetarios' => 'Debates',
'Medios' => 'Imágenes',
'Escritorio' => 'Panel de control',
);
$translated = str_ireplace( array_keys($words), $words, $translated );
return $translated;
}
Pues me he quedado igual, no dices qué texto exactamente cambiar.
WooCommerce tiene varios Hooks para cambiar textos concretos pero sin saber los detalles no te puedo decir.
De todas formas prueba con:
global $product;
if (($product->get_id()) == 'xxx')
etc
etc.....
Iniciador del debate
ele
(@luishgc93)
@lgrusin los textos que quiero cambiar son :
Detalles de facturación -> completar inscripcion
y el de:
Tu pedido -> ultimo paso
Esos textos son de la pagina de checkout, como no tiene sentido mostrar el texto de detalles de facturación en productos que con un cupon se ponen gratis, pues por eso quiero cambiarlo a completar inscripción.
Entonces el codigo quedaria algo asi ?
global $product;
if (($product->get_id()) == '1950'){
add_filter( 'gettext', 'wps_translate_words_array' );
add_filter( 'ngettext', 'wps_translate_words_array' );
function wps_translate_words_array( $translated ) {
$words = array(
'Detalles de facturación' => 'Completar inscripcion',
'Tu pedido' => 'Ultimo paso',
);
$translated = str_ireplace( array_keys($words), $words, $translated );
return $translated;
}
}
Iniciador del debate
ele
(@luishgc93)
@lgrusin se que woo tiene hooks para cambiar los textos pero estos dos concretamente no, por eso uso ese codigo. Mirando por google, el primer texto esta :
woocommerce_checkout_before_customer_details
Billing Details
woocommerce_before_checkout_billing_form
Billing Details -> esta palabra no tiene hooks :/
igual que la otra shipping
Creo que el enfoque que tienes sobre el asunto no es correcto.
El checkout es un página de pedidos no de productos. En cada pedido figuran todos los productos que el cliente ha elegido para comprar, sean gratuitos o no. Por eso no entiendo la idea de hacer un checkout para productos gratis diferente al de productos de pago sabiendo que puede haber varios productos mezclados en el mismo pedido.
Por otro lado, si no te gusta la frase ‘Detalles de facturación’ puedes poner ‘Detalles del pedido’, el pedido siempre existe, sea gratis o no.
-
Esta respuesta fue modificada hace 5 años por
LGrusin.
Iniciador del debate
ele
(@luishgc93)
@lgrusin ya,pero lo necesito así cuando los usuarios seleccionen los pedidos gratuitos. Y ademas no pueden comprar un producto y coger uno a la vez, esta restringido, ya que hay productos exclusivos para unos clientes.
Iniciador del debate
ele
(@luishgc93)
@lgrusin buenas, no me funciona el codigo 🙁 :
global $product;
if (($product->get_id()) == '1692'){
add_filter( 'gettext', 'wps_translate_words_array' );
add_filter( 'ngettext', 'wps_translate_words_array' );
function wps_translate_words_array( $translated ) {
$words = array(
'Detalles de facturación' => 'Completar inscripcion',
'Tu pedido' => 'Ultimo paso',
);
$translated = str_ireplace( array_keys($words), $words, $translated );
return $translated;
}
}
Podrías intentar otro método, los archivos
woocommerce/templates/checkput/form-billing.php
woocommerce/templates/checkput/form-checkout.php
ponlos en la carpeta del tema
woocommerce/checkput/form-billing.php
woocommerce/checkput/form-checkout.php
y modifica desde ahí.
Tendrás que poner un condicional para que detecte un tipo u otro de usuario. Lo del producto no veo cómo puedes diferenciar uno de otro.
Iniciador del debate
ele
(@luishgc93)
@lgrusin no me sirve ese método, necesitaría añadirlo en function o en plugin 🙁
Iniciador del debate
ele
(@luishgc93)
@lgrusin
Por ejemplo, encontre el hook para el boton para finalizar compra, el cual, cambio para un determinado producto por : finalizar inscripción
Pues algo así necesito para el titulo en la página de checkout que pone : Detalles de facturación y el de: tu pedido
add_filter( 'woocommerce_order_button_text', 'custom_checkout_button_text' );
function custom_checkout_button_text() {
// Set HERE your specific product ID
$specific_product_id = 1692;
$found = false;
// Iterating trough each cart item
foreach(WC()->cart->get_cart() as $cart_item)
if($cart_item['product_id'] == $specific_product_id){
$found = true; // product found in cart
break; // we break the foreach loop
}
// If product is found in cart items we display the custom checkout button
if($found)
return __( 'Aceptar Inscripción', 'woocommerce' ); // custom text Here
else
return __( 'Finalizar Compra', 'woocommerce' ); // Here the normal text
}
Iniciador del debate
ele
(@luishgc93)
@lgrusin también encontré este codigo para cambiar el titulo de «detalles de facturación» y no funciona
add_filter( 'gettext', 'change_conditionally_checkout_heading_text', 10, 3 );
function change_conditionally_checkout_heading_text( $translated, $text, $domain ) {
if( $text === 'Detalles de facturación' ){
// HERE set the desired specific product ID
$targeted_product_id = 1692;
// Loop through cart items
foreach( WC()->cart->get_cart() as $cart_item ) {
if( $targeted_product_id == $cart_item['data']->get_id() )
return __( 'Inscripción', $domain );
}
}
return $translated;
}
Iniciador del debate
ele
(@luishgc93)
@lgrusin o como podría hacer que este codigo solo se aplicase a producto especifico ?
add_action('woocommerce_checkout_billing', 'ts_checkout_billing');
function ts_checkout_billing() {
echo '<h3>Inscripción</h3>';
}
Este código funciona, pero no se me ocurre cómo diferenciar productos. Tiene que haber algo que puedas usar para diferenciar por tipo de clientes o productos. Igual con algún campo personalizado.
add_filter('gettext', 'cambiar_texto_checkout', 999, 3);
function cambiar_texto_checkout( $translated_text, $text, $domain ) {
if( $text == 'Billing details' ) return 'Completar inscripción';
if( $text == 'Your order' ) return 'Ultimo paso';
return $translated_text;
}