Вопрос или проблема
Я хочу ограничить это в админ-панели WP:
- Показывать только собственные комментарии (данные пользователям, которые написали/опубликовали/назначили)
посты (администраторы исключены). - Также номера фильтров будут назначены на посты пользователей, а не как на скриншоте, где учитываются все комментарии сайта.
Используя фильтр comments_pre_query
, это хорошо работало в разработке и тестировании:
/**
* @param null $comment_data Вернуть массив данных комментариев для краткого прекращения запроса комментариев WP.
* @param WP_Comment_Query $query Экземпляр WP_Comment_Query, передается по ссылке.
*/
add_filter( 'comments_pre_query', static function ( $comment_data, $query ) {
// Ограничить областью администратора.
if ( ! is_admin() ) {
return null;
}
// Исключить администраторов.
if ( current_user_can( 'manage_options' ) ) {
return null;
}
// Не переопределять существующее ограничение для конкретных авторов.
if ( ! empty( $query->query_vars['post_author__in'] ) ) {
return null;
}
// Включить определение функции, если отсутствует.
if ( ! function_exists( 'get_current_screen' ) ) {
require_once 'wp-admin/includes/screen.php';
}
$screen = get_current_screen();
// Если экран еще не определен, выполните базовую проверку.
if ( is_null( $screen ) && str_contains( $_SERVER['PHP_SELF'], 'edit-comments.php' ) ) {
$screen = (object) array(
'id' => 'edit-comments',
);
}
// Если экран не найден, выйди.
if ( empty( $screen ) || ! is_object( $screen ) ) {
return null;
}
// Если экран неверный, выйди.
if ( 'edit-comments' !== $screen->id ) {
return null;
}
// Ограничить комментарии постами, автором которых является текущий пользователь.
$query->query_vars['post_author__in'] = array( get_current_user_id() );
return null;
}, 10, 2 );
.
Ответ или решение
Ваша задача состоит в том, чтобы ограничить отображение комментариев в административной панели WordPress, чтобы пользователи видели только свои собственные комментарии к записям, которые они написали, опубликовали или к которым были назначены. Ниже представлено подробно изложенное решение, которое позволит достичь этой цели, исключая администраторов из данного ограничения.
Шаги для реализации функции
-
Используйте фильтр
comments_pre_query
: Этот фильтр позволяет изменять параметры запроса перед выполнением его WordPress. Это решение является основным инструментом в вашем случае. -
Проверка на админскую область: Убедитесь, что функция работает только в административной панели. Это может быть реализовано с помощью
is_admin()
. -
Исключите администраторов: Необходимо добавить условие, чтобы администраторы могли видеть все комментарии.
-
Проверка существующих параметров запроса: Если в запросе уже указаны авторы постов, наше изменение не должно им противоречить.
-
Ограничение видимости комментариев: Определите ID текущего пользователя и измените параметры запроса, чтобы они включали только комментарии пользователей к записям, которые созданы данным пользователем.
Пример кода
Вы можете использовать следующий код для добавления в файл функций вашей темы (functions.php
) или в свой плагин:
/**
* Фильтр для ограничения комментариев по автору в административной панели WordPress.
*
* @param null $comment_data Вернуть массив данных комментария для короткой замены WP-запроса комментариев.
* @param WP_Comment_Query $query Экземпляр WP_Comment_Query, переданный по ссылке.
*/
add_filter('comments_pre_query', static function ($comment_data, $query) {
// Ограничиваем только административную область.
if (!is_admin()) {
return null;
}
// Исключаем администраторов (все, у кого права управления).
if (current_user_can('manage_options')) {
return null;
}
// Не переопределяем существующий лимит для конкретных авторов.
if (!empty($query->query_vars['post_author__in'])) {
return null;
}
// Включаем определение функции, если она недоступна.
if (!function_exists('get_current_screen')) {
require_once 'wp-admin/includes/screen.php';
}
$screen = get_current_screen();
// Проверка экрана административной панели.
if (is_null($screen) && str_contains($_SERVER['PHP_SELF'], 'edit-comments.php')) {
$screen = (object) array(
'id' => 'edit-comments',
);
}
// Если экран не определен, выходим.
if (empty($screen) || !is_object($screen)) {
return null;
}
// Ограничиваем видимость только для комментариев, к которым автором является текущий пользователь.
if ('edit-comments' !== $screen->id) {
return null;
}
// Устанавливаем авторство на текущего пользователя.
$query->query_vars['post_author__in'] = array(get_current_user_id());
return null;
}, 10, 2);
Тестирование и оптимизация
После добавления кода протестируйте функциональность в вашей административной панели. Убедитесь, что пользователи видят только свои комментарии и что администраторы имеют доступ ко всем комментариям. Оптимизируйте код, если это необходимо, для улучшения производительности вашего сайта.
Заключение
Данным образом, вы сможете уверенно настроить видимость комментариев для пользователей в WordPress, соблюдая требования безопасности и удобства использования. Этот подход не только помогает обеспечить управление контентом, но и улучшает пользовательский опыт в административной панели.