WordPress tiene una API realmente útil llamada «el reescribir API“. Supongo que ya tenemos «reescritura de URL», este es el proceso que hace que las URL sean más legibles. Por ejemplo, una URL escrita así http://mysite.com/?page=12&category=12&author=47 ¿No es tan guapo? Es difícil recordarlo y a los motores de búsqueda no les gusta mucho. Es por eso que casi todos los CMS tienen una función incorporada que «reescribe» las URL para que se vean así: http://mysite.com/category/business/finance.
La API de reescritura y la clase WP_Rewrite
Dentro de WordPress, este proceso también se conoce como estructura de enlaces permanentes. Cuando cambia de la estructura de enlace permanente predeterminada a una estructura personalizada, automáticamente activa la API de reescritura. Esto es completamente automático. Pero a veces es necesario crear sus propias reglas de reescritura personalizadas.
En esta publicación, crearemos funciones simples para crear una regla de reescritura personalizada simple. Digamos que queremos obtener un valor de referencia, una especie de equivalente a $ _GET[‘referrer’].
Si echamos un vistazo al Codex, podemos ver en la página de reescritura de la API que esta API tiene 6 funciones integradas. El uso más común de la reescritura es usar estas funciones, hay muchos tutoriales sobre eso, por eso voy a usar filtros en lugar de funciones. Porque sí, ¡la API de reescritura también se puede usar con filtros! Esos filtros se enumeran en la Clase WP_Rewrite Página del códice.
Agregar una nueva variable de consulta
Para empezar, necesitamos crear una función que le diga a WordPress que se ha establecido una nueva regla de reescritura. Este es el trabajo del add_rewrite_rule () y add_rewrite_tag () funciones, pero también puede hacerlo utilizando query_vars y rewrite_rules_array filtros. Para hacerlo, necesitamos crear dos funciones y dos filtros. La primera función simplemente agregará una nueva variable al filtro query_vars, y la segunda va a registrar esta nueva variable en las reglas de reescritura global:
/*
|--------------------------------------------------------------------------
| Start Rewrite. Sample: http://mysite.com/referrer/remi
|--------------------------------------------------------------------------
*/
// Register a new var
function rc_add_query_vars( $vars) {
$vars[] = "referrer"; // name of the var as seen in the URL
return $vars;
}
// Hook our function into query_vars
add_filter('query_vars', 'rc_add_query_vars');
// Add the new rewrite rule to existings ones
function rc_add_rewrite_rules($rules) {
$new_rules = array('referrer/([^/]+)/?$' => 'index.php?referrer=$matches[1]');
$rules = $new_rules + $rules;
return $rules;
}
// Hook the function into rewrite_rules_array
add_filter('rewrite_rules_array', 'rc_add_rewrite_rules');
Una vez que agregue este código a cualquiera de su archivo de complemento o su archivo functions.php de tema, acceda a configuración> Enlaces permanentes y guarde la estructura de enlaces permanentes. Esta acción es necesaria. Ahora debería poder acceder a su sitio con este tipo o URL: http://mysite.com/referrer/your-name. Si desea ser redirigido a una página específica, cambie index.php? Referrer = $ matches[1] por index.php? pagename = my-page & referrer = $ coincidencias[1] donde «mi-página» es la página que se redirigirá a slug.
Recuperando el valor de la variable
Ahora que su regla de reescritura está configurada, es posible que desee acceder al valor de la variable. Pero si haces un simple $ _GET[‘referrer’], no obtendrá ningún valor. Para recuperar los valores de vars de URL, debe conectar una función al filtro «template_redirect». Conectarse al filtro «init» es demasiado pronto. Luego, puede acceder a las variables necesarias a través del objeto $ wp_query. Aquí hay una muestra rápida de cómo hacerlo:
// Retrieve URL var
function rc_get_my_vars() {
global $wp_query;
if(isset($wp_query->query_vars['referrer'])) {
$referrer = get_query_var('referrer');
}
}
// Hook the function into template_redirect
add_action( 'template_redirect', 'rc_get_my_vars');
A continuación, puede hacer eco del valor de $ referrer o usarlo como lo hubiera hecho con una variable GET normal.
Por supuesto, puede modificar el uso de más de una variable:
// in rc_add_query_vars()
$vars[] = "referrer";
$vars[] = "campaign";
// in rc_add_rewrite_rules()
$new_rules = array('referrer/([^/]+)/([^/]+)/?$' => 'index.php?pagename=my-page&referrer=$matches[1]&campaign=$matches[2]');
No olvide que necesita habilitar el módulo PHP mod_rewrite para usar la reescritura de URL.