La API de reescritura de WordPress - WPExplorer

La API de reescritura de WordPress – WPExplorer

WordPress tiene una API realmente útil llamada “el reescribe la API“. Supongo que ya tengo algo de “reescritura de URL”. Este es el proceso que hace que las URL sean más legibles. Por ejemplo, una URL escrita como esta http://mysite.com/?page=12&category=12&author=47 no se ve muy bien. Es difícil de recordar 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 enlace permanente. Cuando cambia de la estructura de enlace permanente predeterminada a una estructura personalizada, automáticamente habilita la API de reescritura. Esto es completamente automático. Pero a veces tienes que crear tus propias reglas de reescritura personalizadas.

En este artículo, crearemos algunas 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 Rewrite API que esta API tiene 6 funciones integradas. El uso más común de la reescritura es usar estas funciones, hay muchos tutoriales por ahí, por eso voy a usar filtros en lugar de funciones. Porque sí, ¡la API de reescritura también se puede usar con filtros! Estos filtros se enumeran en la Clase WP_Rewrite Página del códice.

Agregar una nueva variable de consulta

Para comenzar, necesitamos crear una función que le diga a WordPress que se define una nueva regla de reescritura. Es el trabajo del add_rewrite_rule () y add_rewrite_tag () funciones, pero también puede hacer esto usando query_vars y rewrite_rules_array filtros. Para hacer esto, necesitamos crear dos funciones y dos filtros. La primera función simplemente agregará una nueva variable al filtro query_vars, y la segunda 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 haya agregado este código a cualquiera de sus archivos de complemento o archivo de tema functions.php, vaya a configuración> Enlaces permanentes y guarde la estructura del enlace permanente. 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, edite index.php? Referente = $ coincidencias[1] por index.php? pagename = my-page & referrer = $ coincidencias[1] donde “mi-página” es la página para 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 las variables de URL, debe conectar una función al filtro “template_redirect”. El enlace al filtro “init” es demasiado pronto. Luego puede acceder a las variables necesarias a través del objeto $ wp_query. Aquí hay un ejemplo rápido de cómo hacer esto:

// 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');

Luego, puede repetir el valor de $ referrer o usarlo como lo haría 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]');

Recuerde que necesita el módulo PHP mod_rewrite habilitado para usar la reescritura de URL.

Deja un comentario

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

Ir arriba