web-dev-qa-db-fra.com

Réponses aux commentaires sans fil avec lien vers le commentaire d'origine

Je vais expliquer ce que j'essaie d'accomplir.

Je voudrais avoir des commentaires réguliers non-threaded (plats/classiques) avec un lien de réponse à chaque commentaire. Lorsque quelqu'un répond à un commentaire, le commentaire de réponse se termine en haut (ou en bas) en tant que dernier commentaire, comme dans les commentaires par défaut sans thread, mais contrairement au commentaire par défaut sans fil, la réponse doit afficher un lien vers le commentaire original/auteur.

Il existe une solution proposée sur le forum wordpress:

http://wordpress.org/support/topic/reply-to-link-for-chronological-non-threaded-comments

Je n'arrive pas à le faire fonctionner. Je ne sais pas dans quels fichiers l'affiche place les différents morceaux de code. J'ai essayé d'utiliser le code et accrocher une fonction à comment_post:

add_action('comment_post', 'print_reply_link', 10, 2);

function print_reply_link( $comment_id, $approved ){
  if( $approved ){
    $comment = get_comment( $comment_id );
    if ( $comment->comment_parent ) {
    $parent = get_comment( $comment->comment_parent );
    $parent_link = esc_url( get_comment_link( $comment->comment_parent ) );
    printf( ' in reply to <a href="%1$s">%2$s</a>', $parent_link, $parent->comment_author );
    } 
  }
}

Cela a renvoyé une page vierge avec "en réponse à authorname ". Après avoir rechargé le message, un commentaire de réponse s'affiche correctement, mais sans lien vers le commentaire d'origine.

Mes compétences en codage sont vraiment très basiques et je n’ai donc aucune idée de la marche à suivre. Serait très reconnaissant pour toute aide.

10
sarytash

Ceci est ma solution et non la solution proposée suggérée sur les forums WordPress. Cela s'avère assez facile, mais implique quelques étapes.

1) Allez sur wp-admin-> Paramètres-> Discussion et désactivez les commentaires filetés. Cela désactivera le threading, ce que nous voulons, mais nous empêchera également de "répondre" à un commentaire particulier. Nous devons le remettre.

2) Ajoutez le script ci-dessous au functions.php de votre thème ou à un plugin.

function load_script_for_fake_threading() {
    if (is_singular()) wp_enqueue_script('comment-reply');
}
add_action('wp_enqueue_scripts','load_script_for_fake_threading');

3) L’impression des commentaires est traitée par un rappel à wp_list_comments . TwentyEleven utilise la fonction twentyeleven_comment() dans son functions.php. Si votre thème n'a pas de rappel, vous devrez en créer un. Par défaut, le contenu de la méthode start_el de la classe Walker_Comment dans "wp-includes/comment-template.php" est utilisé. Copiez cela ou copiez le rappel du thème et renommez la fonction en fake_threaded_comment.

3) Recherchez la fonction wp_list_comments dans le comments.php de votre thème et modifiez le rappel. Cela devrait ressembler à:

wp_list_comments(array('callback'=>'fake_threaded_comment'));

4) Maintenant, nous allons tricher un peu. Dans ce rappel, 'fake_threaded_comment', il devrait y avoir un appel à la fonction comment_reply_link . Nous devons l'éditer de manière à passer les arguments 'profondeur' et 'max_depth' codés en dur. Nous définissons "profondeur" sur 1 et max_depth sur 2. Cela récupérera notre bouton "Répondre".

comment_reply_link( 
  array_merge( 
    $args, 
      array( 
        'reply_text' => __( 'Reply <span>&darr;</span>', 
        'themetextdomainname' ), 
        'depth' => 1, 
        'max_depth' => 2 
)));

5) Configurez le lien vers le commentaire parent. En regard de la fonction de rappel, vous avez peut-être remarqué des références à $comment. $comment->comment_parent est l'ID du commentaire auquel on a répondu et get_comment_link($comment->comment_parent) donne l'URL du commentaire parent (et non le balisage d'ancrage complet). get_comment($comment->comment_parent) obtiendra les données du commentaire parent. Donc, quelque chose comme ...

$pcom = get_comment($comment->comment_parent);
echo '<a href="'.get_comment_link($comment->comment_parent).'">This is a reply to '.$pcom->comment_author.'</a>';

C'est tout. Vous pouvez maintenant commenter des commentaires particuliers, mais une fois publié, le commentaire s'affichera à la fin ou au début de la liste de commentaires, en fonction de l'ordre de chargement.

Testé avec TwentyEleven sur WordPress 3.4.1 (légèrement obsolète mais il est déjà sur mon serveur de dev). Je suis sûr que certains thèmes ou plugins pourraient faire quelque chose pour résoudre ce problème, mais je ne pense pas qu'un thème ou un plugin bien comporté le romprait.

C'est ma bonne action pour la journée. S'il vous plaît laissez-moi savoir si quelque chose ne va pas.

4
s_ha_dum