Suponiendo que los autores de sus comentarios están destinados a ser usuarios registrados, la forma más fácil es usar un enlace de pre_get_comments
acción para modificar la WP_Comment_Query
variable de user_id
consulta del objeto , de modo que la consulta solo devuelva comentarios del usuario actual:
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' );
También puede usar en current_user_can()
lugar de / además de verificar los roles de los usuarios para adaptar para quién se filtran los comentarios.
Si bien también puede admitir comentarios anónimos al usarlos wp_get_current_commenter()
junto con el author_email
WP_Comment_Query
argumento, esto no es terriblemente confiable ni seguro. Los datos de ID de comentarista anónimo se almacenan en cookies, lo que significa que el usuario puede borrarlos o las cookies podrían caducar, en cuyo caso el usuario no podrá ver sus comentarios hasta que publiquen otro. Las credenciales también se falsifican con bastante facilidad: los visitantes astutos podrían obtener acceso a los comentarios de otros usuarios.
EDITAR - Por qué esto no estaba funcionando, anteriormente
Después de una investigación más exhaustiva, mis intentos anteriores de usar WP_Comment_Query::set()
para cambiar las variables de consulta fallaban porque, como resultado, en WP_Comment_Query
realidad no tiene un set()
método, a diferencia de su WP_Query
contraparte (vea el ticket # 39120 ). Sin embargo, tiene un __call()
"Método Mágico" , que estaba interceptando la llamada al set()
método inexistente y devolviendo falso, evitando así el error que PHP normalmente habría arrojado y confundiéndome sin fin.