it-swarm.com.de

Sichtbarkeit von Kommentaren

Es wird viele Leute geben, die einen Beitrag kommentieren. Wenn ein Kommentator den Beitrag besucht, sollte er "nur" seine eigenen Kommentare sehen können. Der Autor des Beitrags kann alle Kommentare nur in seinem eigenen Beitrag sehen.

Wie kann ich das in WordPress machen?

5
AgentWP

Mit der Aktion "pre_get_comments" in wp-includes/comment.php:

function restrict_visible_comments( $comments_query ) {
    if ( !is_singular() )
        return;

    if ( current_user_can( 'moderate_comments' ) )
        return;  // moderators can see all comments

    if ( get_current_user_id() == get_queried_object()->post_author )
        return;  // the author of the post can see all comments

    $comments_query->query_vars['user_id'] = get_current_user_id();
}
if ( !is_admin() )
    add_action( 'pre_get_comments', 'restrict_visible_comments' );

Beachten Sie, dass in den obigen Abschnitten keine Kommentare von nicht registrierten Benutzern angezeigt werden.

Update: Egal, das wird nicht funktionieren, da get_comments () in comments_template () nicht konsistent verwendet wird:

http://core.trac.wordpress.org/browser/tags/3.1.3/wp-includes/comment-template.php#L882

4
scribu

Meine Lösung für den Autor, nur seine Kommentare zu sehen

add_filter('pre_get_comments','display_only_user_comments');
function display_only_user_comments($query){
    global $pagenow;
    if('edit-comments.php' != $pagenow || $query->is_admin)
        return $query;

    if( !current_user_can( 'manage_options' ) ) {
        global $user_ID;
        $query->query_vars['post_author'] = $user_ID;
    }
    return $query;
}
0

verwenden Sie den Filter comments_array, und entfernen Sie die unnötigen Kommentare.

Loser Code für den Einstieg

<?php
add_filter('comments_array','display_only_user_comments')
function display_only_user_comments($comments){
    $comemnts=NULL;
    /*modify this part to get only user comments*/
    if ( $user_ID) {
              $comments = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND (comment_approved = '1' OR ( user_id = %d AND comment_approved = '0' ) )  ORDER BY comment_date_gmt", $post->ID, $user_ID));
        } else if ( empty($comment_author) ) {
                $comments = get_comments( array('post_id' => $post->ID, 'status' => 'approve', 'order' => 'ASC') );
       } else {
                $comments = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND ( comment_approved = '1' OR ( comment_author = %s AND comment_author_email = %s AND comment_approved = '0' ) ) ORDER BY comment_date_gmt", $post->ID, wp_specialchars_decode($comment_author,ENT_QUOTES), $comment_author_email));

    }

    return $comments;
}
?>
0
Satish Gandham

@ Satish ... Vielen Dank, Mann! Ich weiß nicht, ob Ihre Lösung für den Fragesteller funktioniert hat, aber es hat für mich funktioniert! Ich habe 2 Tage damit verbracht, Dinge mit 'comments_clauses' und 'pre_get_comments' auszuprobieren, und hatte aufgegeben!

0