Pasar parámetros en la URL de WordPress | Adrenalina

Pasar parámetros en la URL de WordPress

Publicado Por | 09 septiembre , 2014 | Desarrollo Web, SEO Técnico | 2 Comments
url-wordpress

Las aplicaciones prácticas donde esta técnica nos puede ser útil pueden no ser obvias. Sin embargo, cuando estamos trabajando con muchas taxonomias tener que crear un template para cada una de ellas puede ser tedioso, y aún más cuando hay pequeñas diferencias entre ellas.

El principal problema que nos encontramos al hacer esto en WordPress, es que, incluso con los pretty permalinks activados, deberíamos crear una nueva página con un template único para cada una de esas categorías. Esto puedo no parecer un problema si tenemos 20 categorías, pero cuando este número escala vamos a querer acelerar el proceso. Además, cuando el cliente necesite generar una categoría nueva deberá contactarnos, y aunque eso implica más horas de facturación, no va en interés del cliente si puede ser evitado.

Para ello, en lugar de crear un conjunto de páginas con su correspondiente template cada vez que agregamos una nueva categoría, podemos usar la capacidad de WordPress de especificar custom rewrite rules para pasar información de forma limpia a través de la url y usar una única página y template para mostrar todas las categorias.

El primer paso consiste en crear una función que añada variables al query string de WordPress y engancharla en el hook de query_vars.

Entonces, crearemos una función para añadir reglas a las rewrite rules de WordPress y engancharla al hook rewrite_rules_array.

Finalmente, en el template de la categoría central, usaremos el $wp_query para obtener los parámetros pasados en la URL.

function add_query_vars($vars) {
$vars[] = "category_vars"; // el nombre de la variable que contendrá el parámetro de la URL
return $vars;
}
// enganchamos la función al hook
add_filter('query_vars', 'add_query_vars');

Cuando enganchamos la función en el hook ‘query_vars’, WordPress obtiene la variables de query. Simplemente añadimos “category_vars” como otra variable de query y se lo enviamos de vuelta a WordPress. En esta guardaremos el nombre de la categoria tal como lo especifiquemos en la URL.

Sin embargo, esto solo no nos soluciona el problema. Debemos decirle a WordPress como que poner en la variable que acabamos de crear. En este ejemplo usaremos una estructura del tipo: http://www.test.com/xxx/category-name, donde xxx sera un identicador definido por el slug de la página a la que le asignemos el template que gestionará las categorias. Deberemos decirle a WordPress que use la última parte de la url para rellenar la variable category_vars, lo haremos mediante una custom rewrite rule.

function add_rewrite_rules($rules) {
$aux_rules = array('xxx/([^/]+)/?$' => 'index.php?pagename=xxx&category_vars=$matches[1]');
$rules = $aux_rules + $rules;
return $rules;
}
// enganchamos la función al hook correspondiente
add_filter('rewrite_rules_array', 'add_rewrite_rules');

De esta manera hemos añadido la regla que permitirá a WordPress rellenar la variable que nos interesa. Así, siempre que en la url encontremos “xxx/” guardará la última porción de la URL en la variable category_vars y usará el template que hemos escogido en xxx.

De esta manera en nuestro template podremos recoger el valor de category_vars para interpretarlo como nos convenga.

No podemos, simplemente usar $_GET para obtener el valor. En su lugar, usaremos el objeto $wp_query.

if(isset($wp_query->query_vars['category_vars'])) {
$cat = urldecode($wp_query->query_vars['category_vars']);
}

Con el contenido de $cat ya podremos utilizar esta información como más nos convenga y mostrar la categoría de una forma adecuada.

Un comentario a tener en cuenta, después de realizar estos cambios, es que para que WordPress use los rewrite rules nuevos deberemos hacer un flush rules, que podemos hacer simplemente accediendo al apartado ajustes/permalinks de nuestro escritorio de WordPress.

Autor: Lluis Torns

  • gustavo jimenez

    Interesante el artículo, pero tengo algunas dudas, soy novato en la parte de desarrollo con wordpress y no conozco bien su estructura. ¿podrías indicar en que ficheros hay que realizar estas modificaciones? En el caso de actualizar la versión de wordpress, estos cambios se perderían?

    Muchas gracias!!

  • Magnífica explicación sobre unas urls amigables! el caso es que a día de hoy tanto en WordPress como en otros CMS existen diferentes plugins o módulos que te dejan unas urls limpias de cara al SEO, aunque esto ya es algo con que debe contar una web bien optimizada… Ojo con las pretty urls y los errores 404 que se pueden originar cuando tenemos muchas urls en nuestro sitio, siempre podemos poner una redirección 301 hacia la home de forma general para las 404, así no perdemos el linkjuice 🙂
    https://webbingbcn.es/

Estudiamos y analizamos su negocio en profundidad, definimos objetivos y planteamos la estrategia de marketing más adecuada centrándonos en conseguir cada uno de los objetivos propuestos. Solicita Presupuesto Ahora

Uso de cookies

En este sitio web utilizamos cookies propias y de terceros para mejorar nuestros servicios, para que usted tenga la mejor experiencia de usuario y analizar su visita. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.