Reescribir una URL de WordPress

En ocasiones nos es util poder reescribir una url de WordPress, sin pasar por htaccess o por otras complicaciones. Por ejemplo, recientemente, nosotros hemos tenido que hacerlo para crear una dirección no real dentro de un sistema WordPress a la que enviar la información [def]IPN[/def] de PayPal (pronto os hablaremos de este tema).

Vamos a verlo con un ejemplo. Este es el formato en que WordPress entiende las variables que le pasamos:

www.miweb.com/index.php?variable=valor

Pero seguro que a nosotros nos gustaría que la URL funcionase tal que así:

www.miweb.com/variable/valor

Esto, amigos, lo llamamos URL amigable. Es aquella que un usuario puede memorizar facilmente, sin simbolos ? ni & para las variables GET. Normalmente, las definimos mediante .htaccess, y para los posts y páginas de WordPress, el sistema las puede autogenerar si entramos en Ajustes > Enlaces Permanentes y configuramos el formato de nuestras URL. Pero si lo que queremos es una página externa a WordPress que queremos incluir en nuestro sistema, hay que programar un poquito.

Esto lo podemos hacer en el archivo functions.php de nuestro theme, pero mi consejo es siempre hacer plugins. Aunque sean para pequeñas modificaciones. Por dos motivos:

  1. Podemos activar y desactivar la funcionalidad desde el gestor de plugins.
  2. No perdemos nuestras modificaciones si actualizamos o cambiamos el theme.

Dicho esto, vamos a crear una nueva carpeta en /wp-content/plugins llamada, en un alarde de originalidad, mi-plugin. Vosotros podéis ponerle el nombre que queráis, pero para el ejemplo que os voy a mostrar, usaré esta.

Como todo buen plugin de WordPress, para funcionar necesita una cabecera:

<?php
/*
Plugin Name: Mi Plugin de Reescritura
Plugin URI: https://www.codigonexo.com/
Description: Reescribe mi_plugin/valor a index.php?mi_plugin=valor
Author: Juan Viñas
Version: 1.0
Author URI: https://www.codigonexo.com/
*/

Todo nuestro plugin va a constar de 3 funciones: una para agregar reglas de reescritura, otra para añadir como válidas las variables, y otra para interpretar la petición. Vamos con la primera:

add_action('generate_rewrite_rules', 'mi_plugin_rewrite_rules');
function mi_plugin_rewrite_rules( $wp_rewrite ) {
  $new_rules = array('mi_plugin/valor' => 'index.php?mi_plugin=valor');
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

Hemos añadido que, cuando llega mi_plugin/valor, WordPress lo interprete como que estamos llamando a index.php?mi_plugin=valor, añadiendo una regla ($new_rules) a las reglas ya existentes ($wp_rewrite->rules).

Ahora añadamos la variable “mi_plugin” como variable válida de la lista de variables de WordPress:

function mi_plugin_query_vars($vars) {
    $new_vars = array('mi_plugin');
    $vars = $new_vars + $vars;
    return $vars;
}
add_filter('query_vars', 'mi_plugin_query_vars');

Lo mismo de antes: hemos añadido $new_vars a las ya existentes ($vars). Luego hemos añadido un filtro para que cuando WordPress esté comprobando sus variables, entienda esta como otra más.

Finalmente, la función para interpretar la petición:

function mi_plugin_parse_request($wp) {
    // En este caso, solo sigue adelante si "mi_plugin==valor"
    if (array_key_exists('mi_plugin', $wp->query_vars) && $wp->query_vars['mi_plugin'] == 'valor') {
        /**
         *  Aquí procesamos la información: redirigimos a otra página, llamamos a una funcion... lo que necesitemos hacer al entrar con nuestra URL reescrita.
         *  ...
         */
    }
}
add_action('parse_request', 'mi_plugin_parse_request');

Comprobamos que la variable existe, y que el valor de la variable es el valor que queremos (en este caso, valor, pero si no establecemos ese if, puede aceptar cualquier valor, siempre que el proceso lo entienda). Dentro del if, ejecutamos el proceso que necesitemos ejecutar (una función, una llamada a otra página…)

Para acabar, una vez que hayamos guardado y activado el plugin, debemos simplemente visitar la página de Ajustes > Enlaces Permanentes, ya que al hacerlo, WordPress comprueba y reconstruye su sistema de enlaces permanentes, validando de esta forma el que acabamos de crear. No hace falta que cambiemos nada, ni siquiera que guardemos las opciones ya existentes, solo con entrar aquí ya debería funcionar.

Listo, ya sabemos reescribir una URL de WordPress sin pasar por htaccess, por si tenemos alguna página externa al sistema, pero dentro de WordPress, que queramos tener también con URL amigable. Por  supuesto, podemos cambiar todo lo que necesitemos: que pase por otra página en lugar de por index.php (pero cuidad que la siga admitiendo el sistema WordPress), “mi_plugin” por el nombre de la variable que queramos, “valor” por el valor que necesitemos, o si necesitamos controlar más de un valor, etc.

“La formación en informática no puede convertir a nadie
en experto programador, de la misma forma que estudiar pinceles
y pigmentos no puede hacer a alguien un experto pintor”.- Eric Raymond

¿Te ha gustado el artículo?
Sé el primero en calificar esta publicación.
1 Star2 Stars3 Stars4 Stars5 Stars
Loading...
Artículo escrito por

¡Exprésate! Dejanos tu comentario

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



Aún no hay comentarios en esta entrada. ¿Te animas?