Как разрешить пользователям видеть только те комменты в админке, которые оставлены к их постам

По умолчанию пользователи с ролями авторов и участников в любом случае не могут редактировать комментарии, оставленные к чужим постам.

Тем не менее, если вы хотите полностью скрыть от них эти комменты, вставляем код в functions.php:

function true_get_comments_by_user_posts($clauses) {
	if (is_admin()) {
		global $wpdb, $user_ID;
		$clauses['join'] = ", {$wpdb->prefix}posts";
		$clauses['where'] .= " AND {$wpdb->prefix}posts.post_author = ".$user_ID." AND {$wpdb->prefix}comments.comment_post_ID = {$wpdb->prefix}posts.ID";
	}
	return $clauses;
}
 
// включаем фильтр, если у пользователя нет прав на редактирование чужих постов, то есть он либо автор, либо участник, либо подписчик
if(!current_user_can('edit_others_posts')) {
	add_filter('comments_clauses', 'true_get_comments_by_user_posts');
}

После установки этого кода возможны некоторые несоответствия значений счетчика, например:

баг счетчика комментариев

Как видно из скриншота, к постам какого-то автора оставлено всего два комментария, однако счетчик показывает 9 штук на модерацию, а если перейти на вкладку «Ожидающие», то мы увидим вот что:

комментарии, ожидающие проверки

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

Если решение всё же найдется, я обязательно добавлю его в этот пост.

Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

Смотрите также