Gran pregunta! WordPress asigna su número de página de comentarios a la var de consulta 'cpage'
que se establece cuando su URL tiene /comment-page-1/
al final. Entonces su culpable está en la redirect_canonical()
función, línea 192 de /wp-includes/canoncial.php
.
if ( get_query_var('paged') || is_feed() || get_query_var('cpage') ) {
Dado que la redirect_canonical()
función se configura como una acción, lo que podemos hacer es insertar nuestra propia función a la que se llamará, haga que nuestra función establezca la 'cpage'
consulta var false
, call redirect_canonical()
y luego 'cpage'
vuelva a establecer lo que era; eso evitará que WordPress redirija hacia usted.
Para insertar su propia función, debe llamar a los dos ganchos 'init'
y 'template_redirect'
así asegurarse de configurar el 'init'
gancho para que se llame después del do_action()
núcleo interno de WordPress que agrega 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);
}
Entonces, por supuesto, necesitas hacer algo con tu 'cpage'
. Puede verificar el valor devuelto por get_query_var('cpage')
o puede agregar otro enlace para permitirle crear una plantilla específica para comentarios, que es lo que hice. Agregará buscar un archivo de plantilla de tema con el mismo que normalmente se cargaría pero [comments].php
al final del nombre en lugar de .php
, es decir single[comments].php
. Tenga en cuenta que establezco la prioridad para este filtro en 11; Es posible que deba establecer un número aún mayor si un complemento que usa se agrega después de su enlace:
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;
}
¡Y aquí está la prueba de que todo funciona!
(fuente: mikeschinkel.com )