Можно ли фильтровать комментарии в сообщении, чтобы пользователь мог видеть только комментарии, которые они написали?

Я относительно новичок в wordpress и кодировании, и я работаю над сайтом, где пользователи должны оставлять комментарии для определенных сообщений, но человек, которого я создаю для сайта, хочет, чтобы пользователь мог видеть только комментарии, которые они написал для этих конкретных должностей, а не комментарии других пользователей.

Я искал вокруг какое-то время и не смог найти решение, которое, похоже, работает. Есть ли способ заставить это работать, что достаточно просто для меня? Любая помощь будет принята с благодарностью.

Благодаря!

Предполагая, что ваши авторы комментариев предназначены для зарегистрированных пользователей, самым простым способом, вероятно, является использование pre_get_comments действия 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 могут истечь – в этом случае пользователь не сможет просматривать свои комментарии до тех пор, пока не опубликует их. Учетные данные также довольно легко подделаны – хитрые посетители потенциально могут получить доступ к комментариям других пользователей.


EDIT – Почему это не работает, ранее

После дальнейшего исследования мои предыдущие попытки использовать WP_Comment_Query::set() для изменения переменных запроса были неудачными, поскольку, как выясняется, WP_Comment_Query фактически не имеет метода set() , в отличие от его WP_Query аналога (см. Билет № 39120 ). Тем не менее, у него есть __call() «Волшебный метод» , который перехватывает вызов несуществующего метода set() и возвращает false, тем самым предотвращая ошибку, которую PHP обычно вызывал и путал меня до конца.