WordPress possède une API très utile appelée « le réécrire l’API« . Je suppose qu’il y a déjà de la « réécriture d’url », c’est le processus qui rend les URL plus lisibles. Par exemple une URL écrite comme ceci http://monsite.com/?page=12&category=12&author=47 n’est-ce pas beau. Il est difficile de s’en souvenir, et les moteurs de recherche ne l’aiment pas beaucoup. C’est pourquoi presque tous les CMS ont une fonction intégrée qui « réécrit » les URL pour les faire ressembler à ceci : http://monsite.com/category/business/finance.
L’API de réécriture et la classe WP_Rewrite
Dans WordPress, ce processus est également connu sous le nom de structure des permaliens. Lorsque vous passez de la structure de permaliens par défaut à une structure personnalisée, vous activez automatiquement l’API de réécriture. Ceci est entièrement automatique. Mais parfois, vous devez créer vos propres règles de réécriture personnalisées.
Dans cet article, nous allons créer des fonctions simples pour créer une règle de réécriture personnalisée simple. Disons que nous voulons obtenir une valeur de référent, en quelque sorte équivalente à un $_GET[‘referrer’].
Si nous regardons le Codex, nous pouvons voir sur la page de réécriture de l’API que cette API a 6 fonctions intégrées. L’utilisation la plus courante de la réécriture est d’utiliser ces fonctions, il existe de nombreux tutoriels à ce sujet, c’est pourquoi je vais utiliser des filtres au lieu de fonctions. Car oui, l’API de réécriture peut aussi être utilisée avec des filtres ! Ces filtres sont répertoriés sur le WP_Rewrite classe Page du codex.
Ajout d’une nouvelle variable de requête
Pour commencer, nous devons créer une fonction qui indiquera à WordPress qu’une nouvelle règle de réécriture est définie. C’est le travail du add_rewrite_rule() et add_rewrite_tag() fonctions, mais vous pouvez également le faire en utilisant les query_vars et rewrite_rules_array filtres. Pour ce faire, nous devons créer deux fonctions et deux filtres. La première fonction va simplement ajouter une nouvelle variable au filtre query_vars, et la seconde va enregistrer cette nouvelle variable dans les règles de réécriture globales :
/*
|--------------------------------------------------------------------------
| 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');
Une fois que vous avez ajouté ce code à l’un de vos fichiers de plugin ou à votre fichier de fonctions.php de thème, accédez à Paramètres> Permaliens et enregistrez la structure des permaliens. Cette action est nécessaire. Vous devriez maintenant pouvoir accéder à votre site avec ce type ou cette URL : http://monsite.com/referrer/votre-nom. Si vous souhaitez être redirigé sur une page spécifique, modifiez index.php?referrer=$matches[1] par index.php?pagename=my-page&referrer=$matches[1] où « my-page » est la page à rediriger vers slug.
Récupérer la valeur de la variable
Maintenant que votre règle de réécriture est définie, vous souhaiterez peut-être accéder à la valeur de la variable. Mais si vous faites un simple $_GET[‘referrer’], vous n’obtiendrez aucune valeur. Pour récupérer les valeurs URL vars, vous devez accrocher une fonction au filtre « template_redirect ». Se connecter au filtre « init » est trop tôt. Ensuite, vous pouvez accéder aux variables nécessaires via l’objet $wp_query. Voici un exemple rapide de la façon de procéder :
// 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');
Vous pouvez ensuite faire écho à la valeur $ referrer ou l’utiliser comme vous l’auriez fait avec une variable GET normale.
Vous pouvez bien sûr modifier utiliser plus d’une 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]');
N’oubliez pas que vous avez besoin du module PHP mod_rewrite pour utiliser la réécriture d’url.