WordPress a une API vraiment utile appelée «le réécrire l’API«. Je suppose que j’ai 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 pas très belle. 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 permalien 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érence, en quelque sorte équivalente à un $ _GET[‘referrer’].

Si nous jetons un œil au Codex, nous pouvons voir sur la page de l’API de réécriture 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 également être utilisée avec des filtres! Ces filtres sont répertoriés sur le Classe WP_Rewrite 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 plugins ou à votre fichier de thème functions.php, 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é vers une page spécifique, modifiez index.php? Referrer = $ matches[1] par index.php? pagename = ma-page & referrer = $ correspond[1] où “ma-page” est la page à rediriger vers slug.

Récupération de 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 des variables URL, vous devez relier une fonction au filtre «template_redirect». L’accrochage 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 l’utilisation de 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 de l’activation du module PHP mod_rewrite pour utiliser la réécriture d’url.

Share: