• Resuelto ele

    (@luishgc93)


    Buenas, tengo este código para cambiar textos de un producto en función de la id del mismo. Pero no efectúa el cambio. ¿ alguien ve el error? gracias 🙂

    add_filter(  'gettext',  'wps_translate_words_array'  );
    add_filter(  'ngettext',  'wps_translate_words_array'  );
    function wps_translate_words_array( $translated ) {
     
         $words = array(
    
        $items = $order->get_items();
    
        foreach ( $items as $item ) {
            // Get product object
            $product = wc_get_product( $item['product_id'] );
    
            // Get product id
            $product_id = $product->get_id();
    
            if ( $product_id == 1692 ) {
                            // 'palabra a traducir' = > 'traducción'
                            'Realizar el pedido' => 'Aceptar inscripción',
                                    }
                                }
                        );
     
         $translated = str_ireplace(  array_keys($words),  $words,  $translated );
         return $translated;
    }
Viendo 15 respuestas - de la 1 a la 15 (de un total de 15)
  • Iniciador del debate ele

    (@luishgc93)

    alguna ayuda 🙁 ?? @lgrusin

    • Esta respuesta fue modificada hace 4 años, 1 mes por ele.
    Moderador LGrusin

    (@lgrusin)

    ¿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;
    }
    Moderador LGrusin

    (@lgrusin)

    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

    Moderador LGrusin

    (@lgrusin)

    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 4 años, 1 mes 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;
    	}
    }
    Moderador LGrusin

    (@lgrusin)

    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>';
    }
    Moderador LGrusin

    (@lgrusin)

    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&oacute;n';
    if( $text == 'Your order' ) return 'Ultimo paso';
    return $translated_text;
    }
Viendo 15 respuestas - de la 1 a la 15 (de un total de 15)
  • El debate ‘cambiar texto de wordpress’ está cerrado a nuevas respuestas.