¿Dejar de WordPress redirigiendo comment-page-1 a la página de publicación?


8

Me gustaría tener una página separada para los comentarios en una publicación, de modo que esta página: /2011/02/post-name/solo muestre la publicación y luego haga clic en un enlace para ver los comentarios, que lo llevará a una página como esta:/2011/02/post-name/comment-page-1/

Luego verificaré la URL para ver si "comment-page-x" está en ella, y mostraré la página de manera diferente si es así (elimine la publicación, para que las personas no tengan que desplazarse más allá de eso cada vez, y también estilizar cosas poco diferente)

Esto funcionaría, pero WordPress redirige comment-page-1a la página de publicación; lo necesito para mantenerlo comment-page-1allí en la URL.

es posible? ¿Cómo puedo hacerlo? ¡Gracias!


1
upvotet the P. Como dijo Mike: buena :)
kaiser

Respuestas:


7

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].phpal 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!

Captura de pantalla de la plantilla de página de WordPress personalizada para comentarios
(fuente: mikeschinkel.com )


Corto ... ¡guau! Lástima que no podamos hacer un +10 aquí ...
kaiser

Gracias por la respuesta detallada, pero una pregunta: ¿dónde puedo poner este código? Lo he intentado en functions.php pero no tengo mucha suerte. Suponiendo que estoy usando el tema twentyten, ¿en qué parte del archivo agrego el código?
Shaun

@Shaun - Figuras. :) La única vez que no agregué el siguiente texto a mi respuesta me llamaron: "Puede agregar el siguiente código al functions.phparchivo de su tema o en un .phparchivo de un complemento que podría estar escribiendo". ¿Pero dices que no está funcionando? ¿Qué es exactamente lo que no está haciendo? ¿Ha puesto echo "Test"; exit;declaraciones en cada una de las funciones para asegurarse de que los ganchos estén disparando? ¿Tiene complementos que pueden ser conflictivos? ¿Intentó cambiar 11en dos lugares a 100?¿Incluyó todo el código? ¿Creó un archivo de plantilla de tema llamado single[comments].php?
MikeSchinkel

@MikeSchinkel Brilliant, gracias. ¡No creé el único [comentarios] .php!
Shaun

@Shaun - ¡Me alegro de poder ayudar!
MikeSchinkel
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.