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

10

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

Je souhaite disposer de commentaires normaux non traités (plats / classiques) avec un lien de réponse pour 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, tout 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 / auteur d'origine.

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

enlace

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 d'ajouter 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 );
    } 
  }
}

Ceci a renvoyé une page vierge avec "en réponse à nom automatique ". 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 matière de 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.

    
posée sarytash 05.02.2012 - 04:10

1 réponse

4

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 dans wp-admin- > Paramètres- > Discussion et désactivez les commentaires filetés. Cela désactivera le threading, ce que nous voulons, mais supprimera également la possibilité pour nous de "répondre" à un commentaire particulier. Nous devons le remettre en place.

2) Ajoutez le script ci-dessous au fichier 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 géré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 fixons "profondeur" à 1 et max_depth à 2. Cela récupérera notre bouton / lien "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 plus 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 ça. Vous pouvez maintenant commenter des commentaires particuliers, mais une fois publié, ce 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 développement). Je suis sûr que certains thèmes ou plug-ins pourraient faire quelque chose pour résoudre ce problème, mais je ne pense pas qu'un thème ou un plug-in bien conçu le briserait.

C'est ma bonne action pour la journée. Faites-le moi savoir si quelque chose ne va pas.

    
réponse donnée s_ha_dum 03.11.2012 - 18:43

Lire d'autres questions sur les étiquettes