Angenommen , Ihre Kommentar Autoren registrierte Nutzer sein sollen, ist der einfachste Weg , wahrscheinlich ein verwenden pre_get_comments
Aktion Haken des ändern WP_Comment_Query
Objekt ‚s user_id
Abfrage var so dass die Abfrage nur Kommentare von den aktuellen Benutzer zurückgibt:
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 / zusätzlich zur Suche nach Benutzerrollen auch verwenden current_user_can()
, um anzupassen, nach welchen Kommentaren gefiltert wird.
Sie können anonyme Kommentare auch wp_get_current_commenter()
in Verbindung mit dem author_email
WP_Comment_Query
Argument unterstützen, dies ist jedoch nicht besonders zuverlässig oder sicher. Anonyme Kommentator-ID-Daten werden in Cookies gespeichert, was bedeutet, dass der Benutzer sie löschen kann oder die Cookies verfallen könnten. In diesem Fall kann der Benutzer seine Kommentare erst anzeigen, wenn er einen anderen veröffentlicht. Die Anmeldeinformationen können auch ziemlich leicht gefälscht werden - geschickte Besucher könnten möglicherweise Zugriff auf Kommentare anderer Benutzer erhalten.
EDIT - Warum das vorher nicht funktioniert hat
Nach weiteren Untersuchungen scheiterten meine früheren Versuche, Abfragevariablen WP_Comment_Query::set()
zu ändern, da sie, wie sich herausstellte, WP_Comment_Query
im set()
Gegensatz zu ihrem WP_Query
Gegenstück keine Methode haben (siehe Ticket Nr. 39120 ). Es gibt jedoch eine __call()
"magische Methode" , die den Aufruf der nicht existierenden set()
Methode abfing und false zurückgab, wodurch der Fehler verhindert wurde, den PHP normalerweise ausgelöst hätte, und der mich bis zum Äußersten verwirrte.