WordPress : Forcer un modèle spécifique basé sur l’URL
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 );
}
}
0 commentaire