[Resuelto] Find a string in functions.php to translate
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.
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?
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. 🙂
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)
¿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');
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');
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');
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
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.