web-dev-qa-db-de.com

Ist es möglich, Kommentare in einem Beitrag zu filtern, sodass ein Benutzer nur die Kommentare sehen kann, die er geschrieben hat?

Ich bin relativ neu in WordPress und Codierung und arbeite an einer Site, auf der die Benutzer Kommentare für bestimmte Posts hinterlassen müssen. Die Person, für die ich die Site erstelle, möchte jedoch, dass der Benutzer nur die Kommentare sehen kann habe für diese spezifischen Beiträge geschrieben und keine Kommentare von anderen Usern.

Ich habe schon eine Weile gesucht und konnte keine Lösung finden, die zu funktionieren scheint. Gibt es eine Möglichkeit, dies zum Laufen zu bringen, die für mich einfach zu implementieren ist? Jede Hilfe wäre sehr dankbar.

Vielen Dank!

8
Keith Pocock

Angenommen, Ihre Kommentarautoren sollen registrierte Benutzer sein, ist die einfachste Möglichkeit, die Abfragevariable pre_get_comments object 's WP_Comment_Query mit einer user_id action hook so zu ändern, dass die Abfrage nur Kommentare aus der aktuellen zurückgibt Nutzer:

function wpse262203_restrict_comment_views( $comments_query ) {
  // Don't interfere with comment results in the dashboard
  if( is_admin() )
    return;

  $current_user = wp_get_current_user(); // Get the current user

  if( $current_user instanceof WP_User && is_user_logged_in() ) {
    // The visitor is logged in as a WordPress user...

    // If they're an administrator, don't filter the comments
    if( in_array( 'administrator', $current_user->roles ) )
      return;

    // Otherwise, restrict queried comments to those authored by this user.
    $comments_query->query_vars[ 'user_id' ] = $current_user->ID;
  }
  else {
    // The visitor isn't logged in - make sure no comments are queried.
    $comments_query->query_vars[ 'comment__in' ] = array(0);
  }
}

add_action( 'pre_get_comments', 'wpse262203_restrict_comment_views' );

Sie können anstelle von/auch current_user_can() verwenden, um nach Benutzerrollen zu suchen um festzulegen, nach welchen Kommentaren gefiltert wird.

Sie können auch anonymes Kommentieren unterstützen, indem Sie wp_get_current_commenter() in Verbindung mit dem Argument author_emailWP_Comment_Query verwenden. Dies ist jedoch nicht besonders zuverlässig oder sicher. Anonyme Kommentator-ID-Daten werden in Cookies gespeichert. Dies bedeutet, dass der Benutzer sie löschen kann oder die Cookies verfallen können. In diesem Fall kann der Benutzer seine Kommentare erst anzeigen, wenn er eine andere veröffentlicht. Die Anmeldeinformationen können auch leicht gefälscht werden. Erfahrene Besucher können möglicherweise auf Kommentare anderer Benutzer zugreifen.


EDIT - Warum das vorher nicht funktioniert hat

Nach weiteren Untersuchungen schlugen meine früheren Versuche, WP_Comment_Query::set() zum Ändern von Abfragevariablen zu verwenden, fehl, da WP_Comment_Query im Gegensatz zu WP_Query keine set()-Methode besitzt (siehe ticket # 39120 ). Es gibt jedoch eine __call() "Magic Method" , die den Aufruf der nicht existierenden Methode set() abfängt und false zurückgibt, wodurch der Fehler verhindert wird, den PHP normalerweise ausgelöst hätte und mich verwirrt zu keinem Ende.

2
bosco