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 🙂