Saltar al contenido Saltar a la barra lateral

Este hilo está resuelto. Aquí tienes una descripción del problema y la solución.

Problema:
El cliente intenta traducir un string en el archivo functions.php de su sitio WordPress, específicamente para cambiar la etiqueta y el placeholder de 'notas de pedido' en el formulario de pago de WooCommerce. Después de escanear su tema y WooCommerce, no puede encontrar el string para traducirlo.
Solución:
Si estás experimentando este problema, te recomendamos utilizar el hook wpml_register_single_string para registrar y traducir strings personalizados añadidos a través de hooks en WooCommerce. Aquí tienes un ejemplo de cómo implementarlo:

function md_custom_woocommerce_checkout_fields($fields) {<br />    $fields['order']['order_comments']['placeholder'] = 'Instrucciones especiales para la entrega de vino, alergias/intolerancias relacionadas con actividades gastronómicas...';<br />    $fields['order']['order_comments']['label'] = 'Añade tu nota especial';<br />    do_action('wpml_register_single_string', 'mystrings', 'order_comments.placeholder', $fields['order']['order_comments']['placeholder']);<br />    do_action('wpml_register_single_string', 'mystrings', 'order_comments.label', $fields['order']['order_comments']['label']);<br />    $fields['order']['order_comments']['placeholder'] = apply_filters('wpml_translate_single_string', $fields['order']['order_comments']['placeholder'], 'mystrings', 'order_comments.placeholder');<br />    $fields['order']['order_comments']['label'] = apply_filters('wpml_translate_single_string', $fields['order']['order_comments']['label'], 'mystrings', 'order_comments.label');<br />    return $fields;<br />}<br />add_filter('woocommerce_checkout_fields', 'md_custom_woocommerce_checkout_fields');

Es importante realizar una copia de seguridad completa del sitio antes de implementar este código. Si esta solución no resuelve tu problema o si el código parece desactualizado o inaplicable en tu caso, te recomendamos abrir un nuevo ticket de soporte. También te sugerimos revisar los problemas conocidos y confirmar que tienes instaladas las últimas versiones de los temas y plugins.

Este es el foro de soporte técnico de WPML, el plugin multilingüe de WordPress.

Todas las personas pueden leerlo pero solo los clientes de WPML pueden ingresar comentarios. El equipo de WPML responde en los foros 6 días a la semana, 22 horas por día.

Etiquetado: 

Este tema contiene 8 respuestas, tiene 2 voices.

Última actualización por Mihai Apetrei hace 11 meses, 1 semana.

Asistido por: Mihai Apetrei.

Autor Publicaciones
octubre 10, 2024 a las 9:02 am #16273478

balbinaS

Antecedentes del problema:
I am trying to translate a string in the functions.php file of my WordPress site. I added a hook to change the label and placeholder of 'order notes' in my WooCommerce checkout form. The code I used is: function md_custom_woocommerce_checkout_fields( $fields ) { $fields['order']['order_comments']['placeholder'] = 'Special instructions for wine delivery, allergies/intolerances regarding gastronomic activities... These are NOT notes for gift vouchers (you will receive in the mail the voucher code and a PDF to fill in and print).'; $fields['order']['order_comments']['label'] = 'Add your special note'; return $fields; } add_filter( 'woocommerce_checkout_fields', 'md_custom_woocommerce_checkout_fields' );

Síntomas:
After scanning my theme and WooCommerce, I can't find the string to translate it.

Preguntas:
How can I find and translate the string in functions.php?
Is there a specific method to translate custom strings added via hooks in WooCommerce?

octubre 10, 2024 a las 1:25 pm #16275405

Mihai Apetrei
Partidario de WPML desde 03/2018

Idiomas: Inglés (English )

Zona horaria: Europe/Bucharest (GMT+03:00)

Hola.

Podrías intentar usar el hook "wpml_register_single_string":
https://wpml.org/wpml-hook/wpml_register_single_string/

Entonces el código se convertiría en algo como esto; no lo he probado, pero creo que es un buen comienzo para ayudarte a lograr lo que querías 🙂


<?php
function md_custom_woocommerce_checkout_fields($fields)
{
    $fields['order']['order_comments']['placeholder'] = 'Instrucciones especiales para la entrega de vino, alergias/intolerancias relacionadas con actividades gastronómicas... Estas NO son notas para vales de regalo (recibirás en el correo el código del vale y un PDF para completar e imprimir).';
    $fields['order']['order_comments']['label'] = 'Añade tu nota especial';
    do_action( 'wpml_register_single_string', 'mystrings', 'mystrings', 'order_comments '.'placeholder', $fields['order']['order_comments']['placeholder'] );
    do_action( 'wpml_register_single_string', 'mystrings', 'mystrings', 'order_comments '.'label', $fields['order']['order_comments']['label'] );
    $fields['order']['order_comments']['placeholder'] = apply_filters( 'wpml_translate_single_string', $fields['order']['order_comments']['placeholder'], 'mystrings', 'order_comments '.'placeholder' );
    $fields['order']['order_comments']['label'] = apply_filters( 'wpml_translate_single_string', $fields['order']['order_comments']['label'], 'mystrings', 'order_comments '.'label' );

    return $fields;
}
add_filter('woocommerce_checkout_fields', 'md_custom_woocommerce_checkout_fields');

Usualmente, el proceso de internacionalización se considera programación personalizada y eso cae fuera del alcance de nuestra Política de Soporte, pero tratamos de ayudar cuando es posible o al menos ofrecer alguna orientación.

Crea una copia de seguridad completa del sitio y luego puedes probar eso o alterarlo como creas conveniente.

Espero que encuentres útil toda esta información. 🙂

Mihai Apetrei

octubre 16, 2024 a las 7:17 am #16293501

balbinaS

Hola, he introducido el código en el functions.php pero no me deja guardar este. Me aparece el mensaje: syntax error, unexpected '$fields' (T_VARIABLE)

octubre 17, 2024 a las 9:25 pm #16302104

Mihai Apetrei
Partidario de WPML desde 03/2018

Idiomas: Inglés (English )

Zona horaria: Europe/Bucharest (GMT+03:00)

Hola y gracias por la actualización.

Intentaré revisar el código más detenidamente y me pondré en contacto contigo.

Mihai

octubre 18, 2024 a las 12:16 pm #16304639

Mihai Apetrei
Partidario de WPML desde 03/2018

Idiomas: Inglés (English )

Zona horaria: Europe/Bucharest (GMT+03:00)

Hola,

¿Podrías por favor probar esto y ver si ahora te permite guardar el código?


<?php
function md_custom_woocommerce_checkout_fields($fields)
{
    $fields['order']['order_comments']['placeholder'] = 'Instrucciones especiales para la entrega de vino, alergias/intolerancias relacionadas con actividades gastronómicas... Estas NO son notas para vales de regalo (recibirás en el correo el código del vale y un PDF para completar e imprimir).';
    $fields['order']['order_comments']['label'] = 'Añade tu nota especial';
    do_action( 'wpml_register_single_string', 'mystrings', 'mystrings', 'order_comments'.'placeholder', $fields['order']['order_comments']['placeholder'] );
    do_action( 'wpml_register_single_string', 'mystrings', 'mystrings', 'order_comments'.'label', $fields['order']['order_comments']['label'] );
    $fields['order']['order_comments']['placeholder'] = apply_filters( 'wpml_translate_single_string', $fields['order']['order_comments']['placeholder'], 'mystrings', 'order_comments'.'placeholder' );
    $fields['order']['order_comments']['label'] = apply_filters( 'wpml_translate_single_string', $fields['order']['order_comments']['label'], 'mystrings', 'order_comments'.'label' );

    return $fields;
}

add_filter('woocommerce_checkout_fields', 'md_custom_woocommerce_checkout_fields');

octubre 18, 2024 a las 12:22 pm #16304663

Mihai Apetrei
Partidario de WPML desde 03/2018

Idiomas: Inglés (English )

Zona horaria: Europe/Bucharest (GMT+03:00)

Además de la versión corregida que compartí anteriormente en mi última respuesta, también puedes intentar esto:

<?php
function md_custom_woocommerce_checkout_fields($fields)
{
    $fields['order']['order_comments']['placeholder'] = 'Special instructions for wine delivery, allergies/intolerances regarding gastronomic activities... These are NOT notes for gift vouchers (you will receive in the mail the voucher code and a PDF to fill in and print).';
    $fields['order']['order_comments']['label'] = 'Add your special note';
    
    // Fixed concatenation issues
    do_action('wpml_register_single_string', 'mystrings', 'mystrings', 'order_comments.placeholder', $fields['order']['order_comments']['placeholder']);
    do_action('wpml_register_single_string', 'mystrings', 'mystrings', 'order_comments.label', $fields['order']['order_comments']['label']);
    
    // Fixed concatenation issues
    $fields['order']['order_comments']['placeholder'] = apply_filters('wpml_translate_single_string', $fields['order']['order_comments']['placeholder'], 'mystrings', 'order_comments.placeholder');
    $fields['order']['order_comments']['label'] = apply_filters('wpml_translate_single_string', $fields['order']['order_comments']['label'], 'mystrings', 'order_comments.label');

    return $fields;
}
add_filter('woocommerce_checkout_fields', 'md_custom_woocommerce_checkout_fields');
octubre 18, 2024 a las 1:12 pm #16304936

Mihai Apetrei
Partidario de WPML desde 03/2018

Idiomas: Inglés (English )

Zona horaria: Europe/Bucharest (GMT+03:00)

Hola,

He vuelto con una versión final del código que también tuve la oportunidad de probar en un sitio de prueba.

function md_custom_woocommerce_checkout_fields($fields)
{
    $fields['order']['order_comments']['placeholder'] = 'Special instructions for wine delivery, allergies/intolerances regarding gastronomic activities... These are NOT notes for gift vouchers (you will receive in the mail the voucher code and a PDF to fill in and print).';
    $fields['order']['order_comments']['label'] = 'Add your special note';
    
    // Fixed concatenation issues
    do_action('wpml_register_single_string', 'mystrings', 'mystrings placeholder', $fields['order']['order_comments']['placeholder'], 'order_comments.placeholder' );
    do_action('wpml_register_single_string', 'mystrings', 'mystrings label',  $fields['order']['order_comments']['label'], 'order_comments.label' );
    
    // Fixed concatenation issues
    $fields['order']['order_comments']['placeholder'] = apply_filters('wpml_translate_single_string', $fields['order']['order_comments']['placeholder'], 'mystrings', 'mystrings placeholder');
    $fields['order']['order_comments']['label'] = apply_filters('wpml_translate_single_string', $fields['order']['order_comments']['label'], 'mystrings', 'mystrings label');

    return $fields;
}
add_filter('woocommerce_checkout_fields', 'md_custom_woocommerce_checkout_fields');
image2.png
octubre 20, 2024 a las 6:17 pm #16309184

balbinaS

Buenas, he probado escaneando los strings de mi template (para escanear el functions.php) pero sigue sin aparecerme para poder realizar la traducción.
No se cual puede ser el problema.
Gracias

octubre 22, 2024 a las 9:59 pm #16319489

Mihai Apetrei
Partidario de WPML desde 03/2018

Idiomas: Inglés (English )

Zona horaria: Europe/Bucharest (GMT+03:00)

Hola y bienvenido de nuevo.

He probado ese código en una instalación limpia.

Existe la posibilidad de que esto no funcione en tu sitio web porque (al menos) uno de los plugins activos o el tema activo podría interferir con el código.

¿Podrías crear una copia de seguridad completa de tu sitio web y luego informarme si el problema persiste incluso cuando solo los plugins de WPML están activos y estás utilizando un tema predeterminado de WordPress?

Por favor, intenta los siguientes pasos para que podamos comprobar si se trata de un problema de compatibilidad:

- crear una copia de seguridad completa del sitio web

- desactivar todos los plugins excepto WPML y sus complementos

- verificar si el problema se repite

- si no es así, reactivar tus plugins uno por uno, comprobando cada vez si el problema vuelve a aparecer para poder entender qué plugin está causando el problema

Si el problema ocurre incluso con los plugins que no son de WPML desactivados:

- dejar todos los plugins que no son de WPML desactivados

- cambiar a un tema predeterminado como TwentySeventeen

- intentar recrear el problema ahora

Si tienes la oportunidad, sería mejor hacer esto en un entorno de staging (pruebas).

Por favor, avísame cómo te va y si seguir alguno de estos pasos solucionó tu problema o trajo algún cambio.

Estaré esperando tu respuesta.