Personalizar las reglas de escritura de URL en WordPress

En uno de los proyectos en los que estoy trabajando actualmente he tenido que crear una serie de páginas con contenido personalizado para integrar en un tema de WordPress. El problema con el que me encontré es que los enlaces permanentes de WordPress llevan su propia dinámica —más allá de editar el fichero .htaccess— y si preparas páginas o entradas con contenido propio, quizás quieras o debas seguir usando las URLs semánticas por aquello del SEO y otras historias.

Así pues, además de tener preparadas las páginas de plantilla que puedas necesitar, lo primero será registrar esas nuevas reglas de escritura para las URL. Puedes incluir este código en el fichero functions.php de tu tema, por ejemplo:

add_action( 'init', 'mis_reglas_rewrites_init' );
function mis_reglas_rewrites_init(){
    add_rewrite_rule('mipagina/([0-9]+)-(.*).html?$','index.php?pagename=mipagina&mivariable_id=$matches[1]','top' );
}

add_filter( 'query_vars', 'misreglas_query_vars' );
function misreglas_query_vars( $query_vars ){
    $query_vars[] = 'mivariable_id';
    return $query_vars;
}

Luego puedes ir a los ajustes de enlaces permanentes desde la administración de WordPress y guarda los ajustes de enlaces permanentes para que refresque estas reglas, no es necesario que cambies nada, simplemente guarda cambios tal cual lo tengas configurado. También puedes llamar a la función flush_rewrite_rules(); para forzar este refresco.

Para recuperar la variable en las páginas que añadas a tu tema de WordPress, puedes hacerlo con la siguiente función:

get_query_var('mivariable_id');

Mientras estés con el desarrollo, si quieres consultar y mostrar en pantalla todas las reglas de escritura de URLs que tienes, puedes usar esta función. Así puedes echar un vistazo a lo que realmente está usando WordPress, por si alguna URL no funciona como esperabas.

function mostrar_rewrite_rules() {
	global $wp_rewrite;
	if (!empty($wp_rewrite->rules)) {
		echo 'Reglas para enlaces permanentes';
		echo '
'; foreach ($wp_rewrite->rules as $nombre => $valor) { echo $nombre.'
'.$valor.'
'; } echo '-fin-'; } else { echo 'Nada que mostrar'; } }

En el Codex de WordPress puedes encontrar muchísima más información si has de desarrollar o personalizar un tema para este gestor de contenidos. Las posibilidades de este CMS llegan hasta donde llegue tu imaginación 🙂

Antonio Lite

Soy periodista especializado en comunicación y contenidos digitales. Consultor SEO y Analítica Web. Experto en optimización de sitios web en ruso. Yandex Metrica Expert. Profesor asociado en Universidad San Jorge y ESIC. Trabajando en proyectos online desde 1998.

antoniolite