web-dev-qa-db-fra.com

Afficher les commentaires de plusieurs ID d'articles dans le modèle de commentaire

Cela peut sembler une requête inhabituelle, mais je tente d’afficher les commentaires de plusieurs publications connexes dans un seul modèle de commentaire.

Par exemple, j'ai plusieurs articles sur le même sujet (IDs 253, 724, 798) et je souhaite que tous les commentaires de ces articles apparaissent ensuite dans un fil continu. Donc, si je regarde post ID 724, je peux aussi voir les commentaires des posts 253 et 798.

Puis-je transmettre plusieurs posts IDs au modèle de commentaires pour que cela nécessite une requête personnalisée avant ou après le modèle de commentaires pour afficher tous les commentaires dans un fil de discussion fusionné?

4
sr83

vous pouvez obtenir des commentaires de chaque message par son identifiant avec

$comments253 = get_comments('post_id=253');
$comments724 = get_comments('post_id=724');
$comments798 = get_comments('post_id=798');

puis fusionnez (fusion de tableaux) et triez le tableau par date (comment-> comment_date étant la clé de la valeur de date) si vous le souhaitez. alors juste

 foreach($comments as $comment) :
      echo($comment->comment_author . '<br />' . $comment->comment_content);
 endforeach;

Tout cela est très manuel et vous voudrez peut-être automatiser le processus, mais c'est probablement une question différente.

2
pcarvalho

Obtenir les commentaires de plusieurs publications est assez simple: il suffit de remplacer comment_post_ID = YOUR_POST_ID par une IN() function.

function wpse_59687_multiple_comment_post_id_query_filter( $query )
{
    $post_ids = array ( 149, 188, 151 );
    if ( FALSE === strpos( $query, 'comment_post_ID = ' ) )
    {
        return $query; // not the query we want to filter
    }

    remove_filter( 'query', 'wpse_59687_multiple_comment_post_id_query_filter' );

    $replacement = 'comment_post_ID IN(' . implode( ',', $post_ids ) . ')';
    return preg_replace( '~comment_post_ID = \d+~', $replacement, $query );
}

Maintenant, vous appelez cette fonction juste avant d’appeler comments_template():

add_filter( 'query', 'wpse_59687_multiple_comment_post_id_query_filter' );

Quoi de plus difficile:

  • get_comments_number() est faux. Vous devez aussi filtrer sa valeur.
  • Les réponses à un commentaire d'un autre article sont redirigées vers l'URL de l'autre article et non vers la page où le commentateur a écrit le commentaire. Réparer ce ne sera pas si trivial…
2
fuxia