WordPress : Forcer un modèle spécifique basé sur l’URL

Publié par Jean-Michel le

Lorsqu’un utilisateur navigue vers un URI commençant par « /forums », WordPress doit appeler un modèle spécifié. Par exemple, toutes ces URL :

  • monsite.com/forums
  • monsite.com/forums/questions
  • monsite.com/forums/questions/1/ma-question
  • monsite.com/forums/questions/ask
  • monsite.com/forums/users

… doit appeler le modèle suivant : mytheme/page-forums.php

Je crois que cela implique WP_Rewrite , mais je n’ai aucune idée de ce qu’il faut faire à partir d’ici.

Des idées?

Solution n°1 trouvée

J’ai inclus du code que j’utilise chaque fois que j’ai besoin de faire des ajouts aux règles de réécriture de WordPress. Il injecte des règles supplémentaires dans la logique de réécriture normale de WordPress afin que vous puissiez diriger WordPress vers des fichiers de modèle spécifiques en fonction de l’URL. Vous pouvez le modifier selon vos besoins, en ajoutant plus de règles à la fonction create_rewrite_rules() et des query_vars supplémentaires à la fonction add_query_vars().

<?php // Forums Class //
$ForumsCode = new Forums();
register_activation_hook( __file__, array($ForumsCode, 'activate') );

add_filter('rewrite_rules_array', array($ForumsCode, 'create_rewrite_rules'));
add_filter('query_vars',array($ForumsCode, 'add_query_vars'));

add_filter('admin_init', array($ForumsCode, 'flush_rewrite_rules'));
add_filter('template_include', array($ForumsCode, 'template_redirect_intercept'));

class Forums {

     function activate() {
        global $wp_rewrite;
        $this->flush_rewrite_rules();
    }

    function create_rewrite_rules($rules) {
        global $wp_rewrite;
        $newRule = array('forums/(.+)' => 'index.php?forumdata='.$wp_rewrite->preg_index(1));
        $newRule2 = array('forums/questions/(.+)' => 'index.php?questions=true&forumdata='.$wp_rewrite->preg_index(1));
        $newRules = $newRule + $newRule2 + $rules;
        return $newRules;
    }

    function add_query_vars($qvars) {
        $qvars[] = 'forumdata';
        return $qvars;
    }

    function flush_rewrite_rules() {
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }

    function template_redirect_intercept($template) {
        global $wp_query;
        if ($wp_query->get('forumdata')) {
            $template = get_bloginfo('template_url') . '/page-forums.php';
        }
        return $template;
    }

    function pushoutput($message) {
        $this->output($message);
    }

    function output( $output ) {
        header( 'Cache-Control: no-cache, must-revalidate' );
        header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
        echo json_encode( $output );
    }
}

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *