Предполагая , что ваш комментарий авторов предназначены для пользователей, самый простой способ, вероятно , использовать pre_get_comments
действие крюк , чтобы изменить WP_Comment_Query
объект «сек user_id
вар запрос таким образом, что запрос возвращает только комментарии из текущего пользователя:
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' );
Вы также можете использовать current_user_can()
вместо / в дополнение к проверке ролей пользователей, чтобы адаптировать, для кого фильтруются комментарии.
Хотя вы также можете поддерживать анонимное комментирование, используя wp_get_current_commenter()
в сочетании с author_email
WP_Comment_Query
аргументом, это не очень надежно или безопасно. Анонимные данные идентификатора комментатора хранятся в файлах cookie, что означает, что пользователь может их очистить, или срок действия файлов cookie может истечь, и в этом случае пользователь не сможет просматривать свои комментарии, пока они не оставят другие. Учетные данные также довольно легко подделаны - хитроумные посетители могут получить доступ к комментариям других пользователей.
РЕДАКТИРОВАТЬ - Почему это не сработало, ранее
После дальнейшего изучения мои предыдущие попытки использовать WP_Comment_Query::set()
для изменения переменных запроса потерпели неудачу, потому что, как оказалось, на WP_Comment_Query
самом деле нет set()
метода, в отличие от его WP_Query
аналога (см. Тикет # 39120 ). Однако у него есть __call()
«Магический метод» , который перехватывает вызов несуществующего set()
метода и возвращает false, предотвращая, таким образом, ошибку, которую обычно выдает PHP, и не смущает меня до конца.