web-dev-qa-db-fra.com

Lien vers la page uniquement avec les commentaires sans publication parent

J'aimerais afficher les commentaires sur leur propre page sans l'article parent. Je sais que je peux utiliser wp_list_comments () sur la page de publication unique et transmettre une fonction de rappel pour utiliser mon propre marquage d'affichage de commentaire. Je prévois faire cela afin de pouvoir inclure un lien avec chaque commentaire qui montrera ce commentaire sur sa propre page.

Si ce n'était pas WordPress, j'utiliserais:

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

... et récupérez le $ comment_id dans la chaîne de requête.

À quoi ressemblerait ce lien dans WordPress? C'est-à-dire: quelle chaîne est-ce que j'inclurais pour accéder directement, disons, à my_comments.php où j'appelle get_comment ($ comment_id) et comment_template ()?

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

Vous pourriez probablement simplement créer une nouvelle page dans WordPress et lui attribuer un modèle personnalisé. Ensuite, l'URL serait simplement ce que ce serait normalement pour accéder à cette page. La seule différence est que le modèle personnalisé que vous utilisez serait configuré pour accepter le commentaire_id via la chaîne de requête, puis obtenir uniquement les détails du commentaire spécifique. Dans le code du modèle, les détails du commentaire sont repris.

Donc, si vous avez créé une page Wordpress appelée "Détails du commentaire", vous pouvez accéder à cette page via http://www.domain.com/comment-details (en supposant que vous avez activé les permaliens). Donc, votre lien ressemblerait à ceci:

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

La page "Détails du commentaire" serait configurée pour utiliser un modèle personnalisé contenant le code pour extraire les détails.

2
Todd Perkins

Il existe de nombreuses façons différentes d'y parvenir, certaines plus polies que d'autres et pratiquement toutes susceptibles de créer un conflit avec d'autres plugins, mais en ignorant tout cela, voici une façon qui est assez proche de ce que vous avez demandé. :)

Cette solution prend en charge un format d’URL semblable au suivant où %comment_id% est l’ID numérique de votre commentaire dans la table wp_comments:

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

Tout d'abord, vous devrez configurer votre réécriture d'URL à l'aide du code suivant. Espérons que cela se passe d'explication, mais n'hésitez pas à demander:

$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.

Vous aurez également besoin d'appeler ce code dans un hook d'activation de plugin pour supprimer les règles, ou bien s'il s'agit de votre site, vous pouvez simplement enregistrer des permaliens dans les paramètres de la console d'administration> Paramètres de permaliens . surface:

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

Ensuite, ajoutez un crochet de filtre parse_query. Ceci sera appelé après que WordPress ait inspecté la requête. Il teste pour voir si votre ensemble comment_id query_var ajouté et, le cas échéant, il vérifie si vous êtes sur l'URL souhaitée. Si c'est le cas, il charge le tableau de commentaires à l'aide de get_comment() afin de définir le paramètre 'p' (qui doit être défini sur un ID d'article) sur l'article associé au commentaire. Ainsi, lorsque WordPress exécute la requête, quelle que soit au moins , il charge quelque chose dont vous aurez besoin dans votre fichier de modèle de thème comment.php ci-dessous et vous n'aurez pas pour exécuter une autre requête plus tard lorsque vous en avez besoin. Ce code indique également à WordPress d’ignorer les publications persistantes à l’aide de l’option caller_get_posts au nom étrange:

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.
    }
}

Ensuite, vous devrez accrocher le code dans /wp-includes/template-loader.php en utilisant le filtre template_include. Ceci sera appelé après que WordPress a inspecté la requête et chargé le post pour le commentaire. Ici, vous allez d'abord vérifier à nouveau comment_id dans la variable query_var et également si l'URL est celle que vous voulez. Si c'est le cas, nous remplaçons la page de modèle /index.php par /comment.php, qui est un fichier de modèle de thème que vous devrez créer:

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;
}

Enfin, vous devez créer votre fichier de modèle de thème que j'ai choisi d'appeler /comment.php. Puisque c'est votre thème, vous voudrez le faire ressembler, mais voici un exemple pour vous aider à démarrer:

<?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();

Des questions? Il suffit de demander.

P.S. Tout le code que je décris ci-dessus peut aller dans le fichier functions.php de votre thème et/ou dans un plugin de votre choix. Une mise en garde concerne les règles de vidage de réécriture d'URL qui doivent être placées dans un crochet d'activation de plug-in si vous souhaitez l'inclure, mais simplement de les vider manuellement dans la section des permaliens de la console d'administration. Je n'ai pas montré comment enregistrer un crochet d'activation, mais si vous voulez en savoir plus, vous pouvez en savoir plus à ce sujet ici .

15
MikeSchinkel