Installer une réécriture d’URL personnalisée avec paramètre sur WordPress

5 juin 2019 camillejg Laisser un commentaire

La réécriture d’adresses est toujours un indispensable du référencement naturel, et peut s’avérer utile à mettre en place lorsque l’on développe des pages sur -mesure ou des plugins WordPress.

Pour ce faire, et lorsque vous souhaitez passer certains paramètres dans vos URL, il est indispensable de suivre certaines règles éditées par le CMS. Ces déclarations sont à faire soit dans votre plugin, soit dans le fichier functions.php de votre thème.
Premièrement, la déclaration des variables, qui autorise leur utilisation des les URL chargées.

// Installation de la variable
function wpd_add_query_vars( $qvars ) {
  $qvars[] = 'ma_variable';
  return $qvars;
}
add_filter( 'query_vars', 'wpd_add_query_vars' );

Deuxième étape, la définition de ma règle de réécriture. Pour l’exemple ci-dessous, je souhaites que toutes les pages appelées « /mon_url/ », et suivies de n’importe quoi d’autre, appeleront ma page « mon_url » définie dans mes pages WordPress. J’y ajoutes la récupération de ma variable, qui va ici aller chercher le premier paramètre situé après « mon_url/ ».

// Initialisation de la règle de réécriture
function wpd_page_rewrite(){
    add_rewrite_rule(
        '^mon_url/([^/]*)?',
        'index.php?pagename=mon_url&ma_variable=$matches[1]',
        'top'
    );
}
add_action( 'init', 'wpd_page_rewrite' );

Votre réécriture est prête. Reste plus qu’à la déclarer à WordPress afin qu’elle soit bien prise en compte. Attention, sans cette réinitialisation des règles de réécriture, votre rewriting personnalisé ne sera jamais pris en compte.
Dans cette fonction, j’ai ajouté un test sur les règles existantes afin que la réinitialisation ne soit prise en compte que dans le cas où « mon_url » n’a jamais été prise en compte.

// Installation de la réécriture dans les règles de rewriting de WordPress
function my_flush_rules()
{
    $rules = get_option( 'rewrite_rules' );
    if ( ! isset( $rules['(mon_url)/(\d*)$'] ) ) {
        global $wp_rewrite; $wp_rewrite->flush_rules();
    }
}
add_action( 'wp_loaded','my_flush_rules' );

Et c’est gagné ! A vous les belles URL réécrites 😉

Récapitulatif du code à créer :

// Installation de la variable
function wpd_add_query_vars( $qvars ) {
  $qvars[] = 'ma_variable';
  return $qvars;
}
add_filter( 'query_vars', 'wpd_add_query_vars' );

// Initialisation de la règle de réécriture
function wpd_page_rewrite(){
    add_rewrite_rule(
        '^mon_url/([^/]*)?',
        'index.php?pagename=mon_url&ma_variable=$matches[1]',
        'top'
    );
}
add_action( 'init', 'wpd_page_rewrite' );

// Installation de la réécriture dans les règles de rewriting de WordPress
function my_flush_rules()
{
    $rules = get_option( 'rewrite_rules' );
    if ( ! isset( $rules['(mon_url)/(\d*)$'] ) ) {
        global $wp_rewrite; $wp_rewrite->flush_rules();
    }
}
add_action( 'wp_loaded','my_flush_rules' );

Articles associés