Modificar textos predefinidos de WordPress sin editar la traducción

Comparte este post

En muchos proyectos nos vemos con la necesidad de modificar algunos de los textos que vienen predefinidos en WordPress, bien porque nos los pida nuestro cliente, o bien porque queramos dirigirnos a nuestro público de alguna forma concreta, por ejemplo, los textos predefinidos en WordPress “tutean” al usuario, y es posible que nosotros queramos tener un tratamiento de “usted”.

Por ejemplo, en el formulario de login de WordPress tenemos el texto predefinido “¿Olvidaste tu contraseña?”:

Si quisieramos cambiar este texto por “¿Olvidó su contraseña?”, podríamos hacerlo con una sencilla función que aplicaríamos en el archivo functions.php de nuestro tema activo, o en nuestro propio plugin de funciones en caso de tenerlo creado.

La función en cuestión sería:

function sustitucion_textos_predefinidos($traduccion){
    $palabras = array(
        '¿Olvidaste tu contraseña?' => '¿Olvidó su contraseña?',
    );
    $traduccion = str_ireplace(array_keys($palabras), $palabras, $traduccion);
    return $traduccion;
}
add_filter('gettext', 'sustitucion_textos_predefinidos');
add_filter('ngettext', 'sustitucion_textos_predefinidos');

Simplemente tenemos que meter en el array $palabras, todas las cadenas de texto que queremos sustituir, donde primero insertamos la cadena tal cual viene en WordPress:

‘¿Olvidaste tu contraseña?’ y asignamos con “=>” la cadena de sustitución ‘¿Olvidó su contraseña?’.

También podemos cambiar cualquier elemento dentro del Panel de Control de WordPress, supongamos por ejemplo, que vamos a adaptar un WordPress para que lo gestione nuestro cliente y queremos cambiar varios elementos del menú, como por ejemplo, sustituir Medios por “Imágenes”, o el botón de Añadir Objeto por “Añadir Imágenes”

Solo tenemos que añadir todas las líneas que deseemos cambiar:

function sustitucion_textos_predefinidos($traduccion){
    $palabras = array(
        '¿Olvidaste tu contraseña?' => '¿Olvidó su contraseña?',
        'Medios' => 'Imágenes',
        'Añadir Objeto' => 'Añadir Imágenes',
    );
    $traduccion = str_ireplace(array_keys($palabras), $palabras, $traduccion);
    return $traduccion;
}
add_filter('gettext', 'sustitucion_textos_predefinidos');
add_filter('ngettext', 'sustitucion_textos_predefinidos');

Como vemos en la función, todas las cadenas de texto que pasemos al array, pasarán por la función str_ireplace(), que localizará la cadena original y la reemplazará por la que le indicamos, sin tener que tocar archivos internos de WordPress ni modificar la traducción.

Espero que haya sido de utilidad el artículo y nos vemos en el siguiente post 🙂

8 Comments

  • ej: Detalles de Pedido #2323 este texto lo ingreso de esta forma pero no funciona: ‘Detalles de Pedido’ => ‘Detalles’,

    • A

      Puede que en este caso, al contener el texto una variable (nº de pedido) no funcione con este método, y tengas que editarlo en los archivos de traducción de WooCommerce (los archivos po/mo). En este momento no tengo tutoriales de cómo editarlos, pero hay mucha información en la red.

  • Hola Dani,

    Gran aporte!!!

    Solo comentarte que te falta cerrar el paréntesis de “str_ireplace(” en la segunda función.

  • Me acabas de salvar de un problema que tenia!

    Muchas gracias por el artículo.

  • Hola,
    Como se pueden modificar los nombres de aquellos botos que se encuentran por defecto en las paginas porque desde las opciones hay algunos botones que no aparecen como asi tambien algunos textos.

Deja tu comentario