:::: MENÚ ::::

Crear nuevas URLs en #WordPress

url-link

Cuando estamos desarrollando un nuevo sitio, en ocasiones necesitamos distribuir el contenido de forma más ordenada y generar nosotros mismo la forma de obtener el contenido. Imagínate una web de películas, en ella tenemos un Top10 y otro Top50 organizados por los votos, pero queremos que se pueda saber cuales son las películas más votadas de hoy, la semana, el mes o incluso el año.

Como estamos tratando con URLs, vamos a guardar el Top10 y el Top50 en secciones de igual nombre, o sea, /top10 y /top50, y para saber si estamos hablando de las votaciones de hoy, semana, mes o año, vamos a usar sus homólogos en ingles, quedando de forma respectiva del siguiente modo /top10/today, /top10/week, /top10/month, /top10/year.

Creando las nuevas URLs

Para empezar vamos a decirle a WordPress dos cosas, que tenemos una nueva URL y qué vamos a hacer si entramos en ella. Para ello usaremos la función add_rewrite_rule(), el cual tiene tres parámetros, dos de ellos representarían los dos puntos que hemos comentamos, la nueva URL y qué hacer.

La única condición para que add_rewrite_rule() funcione es invocarlo en el Action init, por lo que quedaría del siguiente modo:

add_action( 'init', 'mi_nueva_url' );

function mi_nueva_url() {
	add_rewrite_rule( '^(top10|top50)/(today|week|month|year)/?', 'index.php?page_id=1&top=$matches[1]&time=$matches[2]', 'top' );
}

En el primer parámetro creamos la nueva URL mediante una expresión regular. De forma desglosada tendríamos las siguientes partes:

  • ^: Significa el comienzo de la URL, o sea, después de http://midominio.com/.
  • (top10|top50): Con los paréntesis ( ) decimos que queremos guardar el texto que hay entre ellos, y con | decimos que puede ser top10 ó top50.
  • /(today|week|month|year): Al igual que antes, guardamos los valores que está entre paréntesis, y con | decimos que puede ser uno de esos valores.
  • /?: La magia reside en el interrogante ?, con él decimos que la barra / puede ser opcional, o sea, que esté o no.

En otras palabras, decimos que tiene que empezar por top10 ó top50 sí o sí, que seguido deberá tener obligatoriamente uno de los tiempos (today, week, month o year), y por último la barra final puedo o no estar.

Con el segundo parámetro le decimos que hacer cuando accedemos a dicha URL. En mi caso, voy a enviar la visita a la página con ID 1 y con las variables $top y $time, que como hemos capturado en la expresión regular con los (), ahora podremos recuperarlo con el Array $matches, que correspondería a la llave 1 a top10 ó top50, y a la llave 2 a today, week, month o year. Las llaves siguen la numeración en relación a la aparición de los paréntesis.

Por última, el tercer parámetro que puede ser como valor top o bottom, y que básicamente se reduce a cuándo lanzar nuestra URL personalizada, si la primera o la última, o sea, si queremos que sobrescriba alguna existente, o no.

Conclusión

Finalmente hemos podido crear una nueva URL en la cual podemos enviar a nuestros usuarios a donde queramos y que se envíen los datos que deseemos. Aunque en este ejemplo he usado una página, en realidad no es necesario enviar al visitante a un sitio en concreto, nosotros mismos podremos crear íntegramente la página de respuesta si así lo vemos necesario.

A la Rewrite API todavía le quedan ases en la manga para mostrar, como el objeto WP_Rewrite, los tags, o flush.

Share on Facebook0Tweet about this on TwitterShare on Google+4Share on LinkedIn21Share on Tumblr0Pin on Pinterest0Email this to someone