Как создать фильтрованный список пользователей в WordPress с применением meta-запросов

В WordPress иногда возникает необходимость вывести список пользователей, отфильтрованных по определённым критериям, которые хранятся в пользовательских метаданных (user meta). Например, вы хотите показать только пользователей с определённым значением пользовательского поля, или с набором нескольких условий. В этом материале разберём, как использовать класс WP_User_Query для создания таких запросов и как оптимизировать их работу.

Что такое WP_User_Query и meta-запросы

Класс WP_User_Query — это стандартный инструмент WordPress для выборки пользователей с условиями. Он поддерживает фильтрацию по ролям, статусу, дате регистрации, а также по пользовательским метаданным через параметр meta_query.

Meta-запросы позволяют указывать сложные условия на пользовательские поля, например, искать пользователей с определённым значением, в диапазоне чисел, по части строки и т.д. Это особенно полезно, если вы храните дополнительные данные о пользователях в user meta (например, город, статус подписки, уровень доступа).

Пример базового meta-запроса:

$args = [
    'meta_query' => [
        [
            'key' => 'city',
            'value' => 'Moscow',
            'compare' => '='
        ]
    ]
];
$query = new WP_User_Query($args);
$users = $query->get_results();

Создание сложного фильтра с несколькими условиями

Для более сложных условий meta-запрос поддерживает операторы AND и OR — их можно определить в параметре relation. Например, необходимо вывести пользователей, которые живут в Москве или Санкт-Петербурге и при этом имеют подписку «premium».

Пример:

$args = [
    'meta_query' => [
        'relation' => 'AND',
        [
            'relation' => 'OR',
            [
                'key' => 'city',
                'value' => 'Moscow',
                'compare' => '='
            ],
            [
                'key' => 'city',
                'value' => 'Saint Petersburg',
                'compare' => '='
            ],
        ],
        [
            'key' => 'subscription',
            'value' => 'premium',
            'compare' => '='
        ]
    ]
];
$query = new WP_User_Query($args);
$users = $query->get_results();

Данный запрос вернёт всех пользователей, которые живут в одном из указанных городов и имеют подписку «premium».

Фильтрация по числовым и датам параметрам

Meta-запросы поддерживают сравнения числовых значений и дат, если указать параметр type. Например, можно получить всех пользователей, у которых количество заказов больше 10:

$args = [
    'meta_query' => [
        [
            'key' => 'orders_count',
            'value' => 10,
            'compare' => '>',
            'type' => 'NUMERIC'
        ]
    ]
];
$query = new WP_User_Query($args);
$users = $query->get_results();

Для дат можно использовать тип DATE и сравнения вида >=, <= и т.п.

Вывод результатов и оптимизация запросов

После выполнения запроса можно перебрать пользователей и вывести нужную информацию:

if (!empty($users)) {
    foreach ($users as $user) {
        echo '<p>ID: ' . esc_html($user->ID) . ' - ' . esc_html($user->display_name) . '</p>';
    }
} else {
    echo '<p>Пользователи не найдены.</p>';
}

Стоит помнить, что сложные meta-запросы могут быть тяжёлыми для базы данных и влиять на производительность. Хорошей практикой будет:

  • Создавать индексы в базе для часто используемых ключей meta (если есть доступ к базе).
  • Использовать кэширование результатов через Transients API или сторонние кэширующие плагины.
  • Минимизировать кол-во условий и проверять необходимость каждого.

Пример плагина для создания фильтрованного списка пользователей на фронтенде

Ниже пример простого плагина, который добавляет шорткод [wpall_filtered_users] для вывода списка пользователей с фильтрацией по городу и подписке.

/*
Plugin Name: WPAll Filtered Users
Description: Выводит список пользователей с фильтром по метаданным через шорткод
Version: 1.0
Author: WPAll
*/

add_shortcode('wpall_filtered_users', 'wpall_filtered_users_shortcode');

function wpall_filtered_users_shortcode($atts) {
    $atts = shortcode_atts([
        'city' => '',
        'subscription' => ''
    ], $atts, 'wpall_filtered_users');

    $meta_query = ['relation' => 'AND'];

    if (!empty($atts['city'])) {
        $meta_query[] = [
            'key' => 'city',
            'value' => sanitize_text_field($atts['city']),
            'compare' => '='
        ];
    }

    if (!empty($atts['subscription'])) {
        $meta_query[] = [
            'key' => 'subscription',
            'value' => sanitize_text_field($atts['subscription']),
            'compare' => '='
        ];
    }

    $args = [
        'meta_query' => $meta_query,
        'number' => 20
    ];

    $query = new WP_User_Query($args);
    $users = $query->get_results();

    if (empty($users)) {
        return '<p>Пользователи не найдены.</p>';
    }

    $output = '<ul>';
    foreach ($users as $user) {
        $output .= '<li>' . esc_html($user->display_name) . ' (' . esc_html($user->user_email) . ')</li>';
    }
    $output .= '</ul>';

    return $output;
}

Вы можете использовать шорткод на странице так:

[wpall_filtered_users city="Moscow" subscription="premium"]

Этот пример можно доработать, добавив пагинацию, сортировку и более сложные фильтры.

Использование плагинов из WPSHOP для расширения функционала

Для более удобного управления пользовательскими данными и расширенными фильтрами можно использовать плагин Clearfy Pro от WPSHOP. Он позволяет оптимизировать работу с метаданными и добавляет удобные инструменты для управления ролями и доступами.

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

Как создать свой шорткод в WordPress
01.11.2025
Удаление неиспользуемых ролей и их метаданных в WordPress
21.04.2026
Как создать свою систему отзывов с подтверждением в WordPress
24.12.2025
Оптимизация AJAX-запросов в WordPress: практические решения и примеры кода
12.03.2026
Как успешно использовать WooCommerce хуки для автоматизации процессов
11.04.2026