it-swarm-es.com

Enlace a la página que muestra solo comentarios sin publicación principal

Me gustaría mostrar los comentarios de la publicación en su propia página sin la publicación principal. Sé que puedo usar wp_list_comments () en la página de publicación única y pasar una función de devolución de llamada para usar mi propia marca de visualización de comentarios. Planeo hacer esto para poder incluir un enlace con cada comentario que muestre ese comentario en su propia página.

Si esto no fuera WordPress usaría:

<a href = " www.example.com/individual_comment.php?comment_id = $comment_id">View single comment</a>

... y toma el $ comment_id de la cadena de consulta.

¿Cómo sería ese enlace en WordPress? es decir: ¿qué cadena incluiría para obtener directamente, digamos, my_comments.php donde llamo a get_comment ($ comment_id) y comment_template ()?

<a href = "<?php bloginfo('url');?>/what/goes/here?comment_id = $comment_id"<View single comment</a>
5
kevtrout

Probablemente podría crear una nueva página en WordPress y darle a esa página una plantilla personalizada. Entonces la URL sería lo que normalmente sería para llegar a esa página. La única diferencia es que la plantilla personalizada que está utilizando se configurará para aceptar el comment_id a través de la cadena de consulta, y luego solo obtendrá los detalles del comentario específico, y en el código de la plantilla se hará eco de los detalles del comentario.

Por lo tanto, si tiene una página en wordpress llamada "Detalles del comentario" que crea, puede acceder a esa página a través de http://www.domain.com/comment-details (asumiendo que tiene los enlaces permanentes habilitados). Entonces tu enlace se vería así:

<a href = "<?php bloginfo('url');?>/comment-details?comment_id=$comment_id">View single comment</a>

La página "Detalles del comentario" se configuraría para usar una plantilla personalizada que contendría el código para escupir los detalles.

2
Todd Perkins

Hay muchas maneras diferentes de lograr esto, algunas más pulidas que otras y prácticamente todas con potencial de conflicto con otros complementos, pero ignorando todo eso, aquí hay una manera que está muy cerca de lo que pediste. :)

Esta solución admitirá un formato de URL como el siguiente donde %comment_id% es el ID numérico de su comentario de la tabla wp_comments:

http://example.com/comments/%comment_id%/

Primero deberá configurar su reescritura de URL usando el siguiente código. Esperemos que sea razonablemente autoexplicativo, pero no dude en preguntar:

$wp->add_query_var('comment_id');  // Add the "behind-the-scenes" query variable that WordPress will use
$wp_rewrite->add_rewrite_tag('%comment_id%', '([0-9]+)','comment_id=');  // Define a rewrite tag to match that assigns to the query var 
$wp_rewrite->add_permastruct('comment-page', 'comments/%comment_id%');   // Define a URL pattern to match the rewrite tag.

También deberá llamar a este código en un enlace de activación de complemento para eliminar las reglas, o si es su sitio, solo puede guardar los enlaces permanentes en la configuración de la consola de administración > Configuración de enlaces permanentes zona:

global $wp_rewrite;
$wp_rewrite->flush_rules(false);

A continuación, agregue un gancho de filtro parse_query. Esto será llamado después de que WordPress haya inspeccionado la consulta. Se prueba para ver si su comment_id query_var agregado se ha configurado y, de ser así, se comprueba si está en la URL deseada. En caso afirmativo, carga la matriz de comentarios utilizando get_comment() para establecer el parámetro 'p' (que debe establecerse en una ID de publicación) en la publicación relacionada con el comentario. De esa manera, cuando WordPress ejecute la consulta que se ejecutará sin importar qué al menos carga algo que necesitará en su archivo de plantilla de tema comment.php a continuación y no tendrá para ejecutar otra consulta más tarde cuando la necesite. Este código también le dice a WordPress que ignore las publicaciones adhesivas usando la opción caller_get_posts con un nombre extraño:

add_filter( 'parse_query', 'my_parse_query' );
function my_parse_query( $query ) {
    global $wp;
    if (isset($query->query['comment_id']) && substr($wp->request,0,9)=='comments/') { 
        $comment = get_comment($query->query['comment_id']);
        $query->query_vars['p'] =  $comment->comment_post_ID; // Causes the comment's post to be loaded by the query.
        $query->query_vars['caller_get_posts'] = true;  // Keeps sticky posts from invading into the top of our query.
    }
}

Aún así, deberá conectar el código en /wp-includes/template-loader.php usando el filtro template_include. Se llamará después de que WordPress haya inspeccionado la consulta y haya cargado la publicación para el comentario. Aquí, primero verificará nuevamente comment_id en el query_var y también la URL que sea la que desea. Si es así, reemplazamos la página de plantilla /index.php con /comment.php, que es un archivo de plantilla de tema que deberá crear:

add_filter( 'template_include', 'my_template_include' );
function my_template_include( $template ) {
    global $wp,$wp_query;
    if (isset($wp_query->query['comment_id']) && substr($wp->request,0,9)=='comments/') {
        $template = str_replace('/index.php','/comment.php',$template);
    }
    return $template;
}

Por último, ahora necesita crear el archivo de plantilla de tema que elegí llamar /comment.php. Ya que es su tema, querrá que se vea como usted quiere, pero aquí hay un ejemplo para comenzar:

<?php 
/*
 *  File: /wp-content/themes/my-theme/comment.php
 */ 
global $wp_query,$post;
$comment_id = $wp_query->query['comment_id'];
$comment = get_comment($comment_id);
$permalink = get_permalink($post->ID);
get_header();
?>
<div id="container">
    <div id="comment-<?php echo $comment_id; ?>" class="comment">
        <p>Comment by: <span class="comment-author">
            <a href="<?php echo $comment->comment_author_url; ?>"><?php echo $comment->comment_author; ?></a></span>
            on <span class="comment-date"><?php echo date("D M jS Y", strtotime($comment->comment_date)); ?></span>
          at <span class="comment-time"><?php echo date("h:ia", strtotime($comment->comment_date)); ?></span>
        </p>
        <p>About: <a href="<?php echo $permalink; ?>"><?php echo $post->post_title; ?></a></p>
        <blockquote><?php echo $comment->comment_content; ?></blockquote>
    </div>
</div>
<?php 
get_sidebar();
get_footer();

¿Alguna pregunta? Solo pregunta.

PD Todo el código que describo anteriormente puede ir en el archivo functions.php de su tema y/o en un plugin propio. Una advertencia es para las reglas de vaciado de reescritura de URL que deben ir en un gancho de activación de complemento si va a incluirlo en su lugar, simplemente vaciándolos manualmente en la sección de enlaces permanentes de la consola de administración. No mostré cómo registrar un gancho de activación, pero si desea obtener más información, puede leer sobre esto aquí .

15
MikeSchinkel