Grande question! WordPress attribue votre numéro de page de commentaire à la var de requête 'cpage'
qui est définie lorsque votre URL a /comment-page-1/
à la fin. Votre coupable est donc dans la redirect_canonical()
fonction, ligne 192 de /wp-includes/canoncial.php
.
if ( get_query_var('paged') || is_feed() || get_query_var('cpage') ) {
Puisque la redirect_canonical()
fonction est définie comme une action, ce que nous pouvons faire est d'insérer notre propre fonction à appeler à la place, demandez à notre fonction de définir la 'cpage'
requête var sur false
, d'appeler redirect_canonical()
, puis de 'cpage'
rétablir ce qu'elle était; qui empêchera WordPress de vous rediriger.
Pour insérer votre propre fonction, vous devez appeler les deux hooks 'init'
et, 'template_redirect'
ainsi, assurez-vous de définir le 'init'
hook à appeler après le do_action()
noyau WordPress intérieur qui ajoute redirect_canonical()
:
add_action('init','yoursite_init',11); //11=lower priority
function yoursite_init() {
remove_action('template_redirect','redirect_canonical');
add_action('template_redirect','yoursite_redirect_canonical');
}
add_action('template_redirect','yoursite_redirect_canonical');
function yoursite_redirect_canonical($requested_url=null, $do_redirect=true) {
$cpage = get_query_var('cpage');
set_query_var('cpage',false);
redirect_canonical($requested_url, $do_redirect);
set_query_var('cpage',$cpage);
}
Alors bien sûr, vous devez faire quelque chose avec votre 'cpage'
. Vous pouvez soit vérifier la valeur renvoyée par, get_query_var('cpage')
soit ajouter un autre hook pour vous permettre de créer un modèle spécifique au commentaire, ce que j'ai fait. Il ajoutera un fichier de modèle de thème avec le même que celui qu'il chargerait normalement mais avec [comments].php
à la fin du nom au lieu de .php
, c'est-à-dire single[comments].php
. Notez que j'ai défini la priorité pour ce filtre à 11; vous devrez peut-être définir un nombre encore plus grand si un plug-in que vous utilisez s'ajoute après votre hook:
add_filter('single_template','yoursite_single_template',11);
function yoursite_single_template($template) {
if (get_query_var('cpage'))
$template = str_replace('.php','[comments].php',$template);
return $template;
}
Et voici la preuve que tout fonctionne!
(source: mikeschinkel.com )