En supposant que les auteurs de vos commentaires sont destinés à être des utilisateurs enregistrés, le moyen le plus simple consiste probablement à utiliser un crochet d' pre_get_comments
action pour modifier la WP_Comment_Query
variable de user_id
requête de l' objet de sorte que la requête ne renvoie que les commentaires de l'utilisateur actuel:
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' );
Vous pouvez également utiliser à la current_user_can()
place de / en plus de vérifier les rôles d'utilisateur pour personnaliser les filtrages des commentaires.
Bien que vous puissiez également prendre en charge les commentaires anonymes en utilisant wp_get_current_commenter()
conjointement avec l' author_email
WP_Comment_Query
argument, ce n'est pas terriblement fiable ou sécurisé. Les données d'identification des commentateurs anonymes sont stockées dans des cookies, ce qui signifie que l'utilisateur peut les effacer ou que les cookies peuvent expirer - auquel cas l'utilisateur ne pourrait pas voir ses commentaires avant d'en publier un autre. Les informations d'identification sont également assez facilement usurpées - les visiteurs astucieux pourraient potentiellement avoir accès aux commentaires d'autres utilisateurs.
EDIT - Pourquoi cela ne fonctionnait pas, auparavant
Après une enquête plus approfondie, mes tentatives antérieures WP_Comment_Query::set()
pour modifier les variables de requête ont échoué car, en WP_Comment_Query
fait , il n'a pas de set()
méthode, contrairement à son WP_Query
homologue (voir ticket # 39120 ). Il a cependant une __call()
"méthode magique" , qui interceptait l'appel à la set()
méthode inexistante et renvoyait false, empêchant ainsi l'erreur que PHP aurait normalement renvoyée et me confondant sans fin.
functions.php
fichier de votre thème , mais si un tiers a créé le thème, les modifications pourraient être écrasées lors de la mise à jour du thème. Le meilleur endroit pour mettre cela est dans un nouveau plugin - suivez la section "Mise en route" du Manuel de développement de plugin (juste la partie la plus haute de la page) pour créer un nouveau fichier de plugin, puis collez la solution dans ma réponse sous la informations d'en-tête.functions.php
maintenant (bien que pour être honnête, je ne l'ai pas testé Oo). Faites-moi savoir comment ça se passe!