WP бэкенд, Показывать только собственные комментарии (предоставить пользователям, которые написали/опубликовали/назначили) посты

Вопрос или проблема

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

Шаги для реализации функции

  1. Используйте фильтр comments_pre_query: Этот фильтр позволяет изменять параметры запроса перед выполнением его WordPress. Это решение является основным инструментом в вашем случае.

  2. Проверка на админскую область: Убедитесь, что функция работает только в административной панели. Это может быть реализовано с помощью is_admin().

  3. Исключите администраторов: Необходимо добавить условие, чтобы администраторы могли видеть все комментарии.

  4. Проверка существующих параметров запроса: Если в запросе уже указаны авторы постов, наше изменение не должно им противоречить.

  5. Ограничение видимости комментариев: Определите 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, соблюдая требования безопасности и удобства использования. Этот подход не только помогает обеспечить управление контентом, но и улучшает пользовательский опыт в административной панели.

Оцените материал
Добавить комментарий

Капча загружается...