В этой статье мы подробно разберём, как создать уникальный фильтр по пользователям в WordPress. Такой фильтр позволяет выводить записи, курсы или кастомные типы записей, связанные с конкретными пользователями, например, авторизованными студентами, преподавателями или авторами. Это полезно для образовательных сайтов, таких как wpfreecourses.ru, где необходимо показывать контент, персонализированный для каждого пользователя.
Зачем нужен фильтр по пользователям в WordPress
Фильтрация контента по пользователям позволяет создавать персонализированные страницы, например, показывать только те курсы, на которые записан текущий пользователь, или выводить уроки, созданные конкретным преподавателем. Это улучшает UX, упрощает навигацию и повышает вовлечённость.
Часто для этого используют плагины, но для гибкости и точного контроля лучше написать собственное решение с помощью WP_Query и фильтров.
Пример использования пользовательского поля для фильтрации курсов
Представим, что у вас есть кастомный тип записи course, а также метаполе enrolled_users, в котором хранится массив ID пользователей, записанных на курс. Наша задача — вывести на странице только те курсы, в которых числится текущий пользователь.
Создание WP_Query с фильтром по пользователю
Ниже пример кода, который можно вставить в файл шаблона или в shortcode-функцию:
function wpfreecourses_get_user_courses_query($user_id) {
$args = [
'post_type' => 'course',
'posts_per_page' => -1,
'meta_query' => [
[
'key' => 'enrolled_users',
'value' => '"' . $user_id . '"',
'compare' => 'LIKE'
]
]
];
return new WP_Query($args);
}
// Получаем ID текущего пользователя
$current_user_id = get_current_user_id();
$query = wpfreecourses_get_user_courses_query($current_user_id);
if ($query->have_posts()) {
echo '<ul>';
while ($query->have_posts()) {
$query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul>';
} else {
echo '<p>У вас нет записанных курсов.</p>';
}
wp_reset_postdata();
Обратите внимание, что мы используем LIKE сравнение, потому что в метаполе хранится сериализованный массив ID пользователей. Если вы используете кастомные таблицы или отдельные связи — код будет другим.
Использование плагина Advanced Custom Fields для удобного управления метаполями
Для создания и управления метаполем enrolled_users удобно использовать плагин Advanced Custom Fields (ACF). В ACF можно создать поле типа «Пользователь», которое позволит удобно выбирать пользователей из админки и автоматически сохранит ID пользователей в метаполе.
Это значительно упрощает управление связями между курсами и пользователями без необходимости писать сложный код для сохранения данных.
Добавление AJAX фильтрации курсов по пользователям
Если вам нужно динамически обновлять список курсов по пользователям без перезагрузки страницы, можно добавить AJAX-запросы в WordPress.
Пример AJAX обработчика
add_action('wp_ajax_wpfreecourses_filter_user_courses', 'wpfreecourses_filter_user_courses_callback');
add_action('wp_ajax_nopriv_wpfreecourses_filter_user_courses', 'wpfreecourses_filter_user_courses_callback');
function wpfreecourses_filter_user_courses_callback() {
$user_id = intval($_POST['user_id']);
$query = wpfreecourses_get_user_courses_query($user_id);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
} else {
echo '<li>Курсы не найдены.</li>';
}
wp_die();
}
Для вызова AJAX из JavaScript используйте стандартный объект jQuery.ajax или fetch, передавая action=wpfreecourses_filter_user_courses и user_id. Не забудьте локализовать скрипт для передачи параметра ajax_url.
Полезные плагины для улучшения фильтрации и управления пользователями
- Clearfy Pro — для оптимизации и управления ролями пользователей;
- WPCommunity — создание форумов и сообществ с возможностью фильтрации пользователей;
- WPRemark — модерация комментариев и пользовательского контента.
Заключение по созданию уникального фильтра по пользователям
Создание уникального фильтра по пользователям в WordPress — задача, которая решается при помощи метаполей, WP_Query и при необходимости AJAX. Это позволяет создавать мощный и гибкий функционал для образовательных сайтов, курсов и других проектов с персонализированным контентом.
Использование плагинов ACF и других инструментов из экосистемы WordPress помогает упростить работу с метаданными и улучшить UX.