web-dev-qa-db-fra.com

Le commentaire ne devrait pas voir ses commentaires dans Wordpress

Je construis un site pour une recherche et mes participants seront tous connectés pour utiliser le site. J'aimerais que ces participants ne puissent voir que leurs propres commentaires, afin que les commentaires des autres utilisateurs soient masqués.

J'utilise le fichier comments.php avec, entre autres, ce code simple et un rappel pour formater la sortie des commentaires:

<?php if ( have_comments() ) : ?>
      <ol class="commentlist">
          <?php wp_list_comments( 'type=comment&callback=custom_comentarios' ); ?>
      </ol>
      <?php if ( ! comments_open() ) : ?>
          <p class="no-comments">Comments are closed</p>
      <?php endif; ?>
<?php endif; ?>

Et ce code simple sur functions.php pour formater la sortie de commentaires:

<?php
/* Custom callback function for displaying comments, see comments.php */
function custom_comentarios($comment, $args, $depth) {
   $GLOBALS['comment'] = $comment; ?>
   <li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">
     <div id="comment-<?php comment_ID(); ?>">
      <?php if ($comment->comment_approved == '0') : ?>
         <em><?php _e('Your comment is awaiting moderation.') ?></em>
         <br />
      <?php endif; ?>
      <?php comment_text() ?>     
     </div>
<?php
}
?>

Que dois-je placer autour de ce code pour filtrer les commentaires et les montrer uniquement à leurs propriétaires? Je dois mentionner que je ne suis pas un programmeur et que je ne connais pas la syntaxe php: -/Je sais que cela ressemblera à quelque chose du genre: récupère l'utilisateur actuel, vérifie s'il y a un commentaire de l'utilisateur actuel sur le message actuel, si vrai alors montrer le commentaire. Mais comment écrire cela en php?

1
lu-bhz

Pour ce faire, vous devez fournir le deuxième paramètre de wp_list_comments() , qui serait $comments et est décrit comme suit:

(array) (facultatif) Tableau obtenu par requête get_comments .
Défaut: Le retour par défaut de get_comments .

Ce qui précise en fait ce que vous devez faire, ce qui utiliserait get_comments() . Ci-dessous un exemple générique expliquant comment y parvenir:

$user_id = get_current_user_id();
$user_specific_comments = get_comments(
    array(
        'user_id' => $user_id
    )
);
wp_list_comments(
    array(
        'per_page' => 3
    ),
    $user_specific_comments
);

Le principe est clair maintenant, cela devrait donc vous aider à démarrer.

1
Nicolai

Cela permet la messagerie privée entre l'auteur du post et l'auteur du commentaire ... // https://wpquestions.com/Only_post_author_and_commentor_can_view_their_own_comments/10125 function restrict_comments ( $ commentaires, $ post_id) {

global $post;

$user = wp_get_current_user();

if($post->post_author == $user->ID){

        return $comments;

}

foreach($comments as $comment){

    if(  $comment->user_id == $user->ID || $post->post_author == $comment->user_id  ){

        if($post->post_author == $comment->user_id){

            if($comment->comment_parent > 0){

                $parent_comm = get_comment( $comment->comment_parent );

                if( $parent_comm->user_id == $user->ID ){

                    $new_comments_array[] = $comment;       

                }

            }else{

                    $new_comments_array[] = $comment;   

            }

        }else{

            $new_comments_array[] = $comment;           

        }

    }

}

 return $new_comments_array; }



add_filter( 'comments_array' , 'restrict_comments' , 10, 2 );
0
Pete