Reemplazar cadenas en WordPress

Imaginemos que nuestro tema o alguno de los plugins que usamos genera un texto que nos gustaría cambiar. El código que vamos a presentar hace precisamente eso, es decir, busca una cadena de texto y la cambia «al vuelo» de forma que el visitante vea el resultado que nosotros queremos mostrar.

Un apunte inicial: hay funciones que se ejecutan antes de haber enviado ningún texto de la página al cliente y por tanto no podremos cambiarlas con este truco.

Por otra parte, el código debe insertarse en el archivo «functions.php» del tema activo o en nuestro plugin personal. En el ejemplo hemos usado str_replace, pero también podríamos utilizar preg_replace. Eso sí, recordar que se trata de modificar el «html» devuelto por WordPress por lo que no podemos sustituir una cadena de texto por una función de php ya que ésta no se ejecutará.

function inicio_modificacion_html() {
    ob_start();
}

function fin_modificacion_html() {
    $html = ob_get_clean();
    $html = str_replace( "valor a buscar 1", "valor de reemplazo 1", $html );
    $html = str_replace( "valor a buscar 2", "valor de reemplazo 2", $html );
    $html = str_replace( "valor a buscar 3", "valor de reemplazo 3", $html );
    echo $html;
}

add_action( 'wp_head', 'inicio_modificacion_html' );
add_action( 'wp_footer', 'fin_modificacion_html' );

Expliquemos el funcionamiento de este código:

  • Llamamos a la función inicio_modificacion_html() cuando WordPress accede a la sección «head» de nuestro sitio durante la representación.
  • La función ob_start() coloca la salida del script PHP en un búfer interno, en lugar de entregarlo al cliente. El resto de la página se genera en este búfer, hasta que, en el pie de página, se llama a la función fin_modificacion_html(). Esto desencadena ob_get_clean(), que vuelca el contenido del búfer en la variable $htmly elimina el búfer de salida actual.
  • Ahora tenemos el contenido renderizado en PHP de la carga de la página en la variable $html, lo que significa que podemos ejecutar la función «str_replace()» para reemplazar cadenas específicas en ella.
  • Una vez que hemos reemplazado todas las cadenas que queremos, se devuelve el contenido de $html para continuar la carga de la página.

Todo esto sucede en el servidor, antes de que el contenido se devuelva al visitante, lo que significa que es completamente transparente. El impacto en el rendimiento es mínimo siempre y cuando no abusemos del número de reemplazos a realizar.

Se pueden aplicar condicionales, pero hay que tener cuidado. En principio, se deben aplicar a las dos funciones los mismos filtros salvo que uno de los reemplazos se ejecute siempre. En este caso, no haría falta incluir el filtro en la primera función.

Nota: no indico el origen del código porque ha sido recogido en muchos sitios y no se a ciencia cierta quien es el autor inicial.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *