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

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

Тем не менее, если вы хотите полностью скрыть от них эти комменты, вставляем код в 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 в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

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

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал