Можно ли фильтровать комментарии в сообщении, чтобы пользователь мог видеть только комментарии, которые они написали?
Я относительно новичок в Wordpress и кодировании, и я работаю над сайтом, где пользователям нужно оставлять комментарии для определенных сообщений, но человек, которого я создаю для сайта, хочет, чтобы пользователь мог видеть только комментарии, которые они написали для этих конкретных сообщений, а не комментарии других пользователей.
Я искал вокруг какое-то время и не смог найти решение, которое, похоже, работает. Есть ли способ заставить это работать, что достаточно просто для меня? Любая помощь будет принята с благодарностью.
Спасибо!
1 ответ
Предполагая, что ваши авторы комментариев предназначены для зарегистрированных пользователей, самым простым способом, вероятно, является использование pre_get_comments
action , чтобы изменить WP_Comment_Query
объект user_id
query var, чтобы запрос возвращал комментарии только от текущего пользователя:
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 могут истечь - в этом случае пользователь не сможет просматривать свои комментарии до тех пор, пока не опубликует их. Учетные данные также довольно легко подделаны - хитрые посетители могут потенциально получить доступ к комментариям от других пользователей.
EDIT - Почему это не работает, ранее
После дальнейшего изучения мои предыдущие попытки использовать WP_Comment_Query::set()
для изменения переменных запроса были неудачными, потому что, как выясняется, WP_Comment_Query
на самом деле не имеет метода set()
, в отличие от ---- +: = 11 =: + ---- (см. билет № 39120 ). Однако он имеет WP_Query
«Волшебный метод» , который перехватывал вызов несуществующего __call()
и возвращает значение false, тем самым предотвращая ошибку, которую PHP обычно вызывал и путал бы меня до конца.