Иерархия пользователей в WordPress часто строится по ролям или уровням доступа, но в некоторых проектах возникает задача организовать пользователей по географическому принципу — например, по странам, регионам или городам. Такой подход полезен для мультигеографических сайтов, порталов с локальными отделениями или сервисов с региональными менеджерами. В этой статье мы подробно разберём, как создать иерархию пользователей по географии в WordPress с помощью пользовательских таксономий, метаполей и REST API, а также какие плагины помогут упростить задачи.
Почему нужна иерархия пользователей по географии в WordPress
Организация пользователей по географии позволяет:
- Группировать пользователей по локациям для удобства управления и фильтрации;
- Ограничивать или предоставлять доступ к контенту и функциям сайта на основе региона;
- Автоматизировать рассылки и уведомления по географическим сегментам;
- Интегрировать локальные сервисы и отображать релевантный контент.
К примеру, если у вас есть сайт с региональными партнёрами или агентами, и нужно, чтобы менеджеры видели только своих пользователей из определённого региона.
Создание пользовательской таксономии «География» для пользователей
Регистрация таксономии для пользователя
По умолчанию WordPress не поддерживает таксономии для пользователей, но можно добавить такую возможность самостоятельно. Это удобно, если вы хотите иметь иерархию географических терминов (страна → регион → город) и присваивать их пользователям.
Добавим функцию в файл functions.php вашей темы или в плагин:
function wphierarchy_register_user_geo_taxonomy() {
$labels = array(
'name' => 'География пользователей',
'singular_name' => 'География пользователя',
'search_items' => 'Поиск по географии',
'all_items' => 'Все географии',
'edit_item' => 'Редактировать географию',
'update_item' => 'Обновить географию',
'add_new_item' => 'Добавить новую географию',
'new_item_name' => 'Новое имя географии',
'menu_name' => 'География',
);
register_taxonomy('user_geo', 'user', array(
'hierarchical' => true, // чтобы была иерархия
'labels' => $labels,
'show_ui' => true,
'show_in_rest' => true, // для совместимости с Gutenberg и REST API
'public' => true,
'rewrite' => false,
));
}
add_action('init', 'wphierarchy_register_user_geo_taxonomy');Эта функция создаст иерархическую таксономию с названием «География пользователей», которую можно будет использовать для назначения географических терминов пользователям.
Добавление терминов и их иерархии
В админке WordPress появится новый пункт для управления географией пользователей. Создайте основную структуру: например, страна → регион → город, например:
- Россия
- Москва и область
- Москва
- Подольск
- Санкт-Петербург
- Москва и область
- США
- Калифорния
- Лос-Анджелес
- Сан-Франциско
- Калифорния
Так вы получите удобную иерархическую структуру, которая потом будет использоваться для фильтрации и отображения.
Присвоение географии пользователям и вывод данных
Присвоение через профиль пользователя
После регистрации таксономии, при редактировании пользователя в админке появится мета-бокс с географией, где можно выбрать подходящие термины.
Вывод географии пользователя в шаблоне
Чтобы вывести географию пользователя в шаблоне, используйте функцию:
function wphierarchy_get_user_geo_terms($user_id) {
$terms = wp_get_object_terms($user_id, 'user_geo');
if (!empty($terms) && !is_wp_error($terms)) {
$names = wp_list_pluck($terms, 'name');
return implode(', ', $names);
}
return '';
}Пример использования:
$geo = wphierarchy_get_user_geo_terms(get_current_user_id());
echo 'География пользователя: ' . esc_html($geo);Фильтрация пользователей по географии в админке
Для удобства администраторов стоит добавить фильтр по таксономии географии на странице списка пользователей.
function wphierarchy_add_user_geo_filter() {
$screen = get_current_screen();
if ($screen->id !== 'users') {
return;
}
$taxonomy = 'user_geo';
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
));
echo '<select name="user_geo_filter">';
echo '<option value="">Все географии</option>';
foreach ($terms as $term) {
$selected = (isset($_GET['user_geo_filter']) && $_GET['user_geo_filter'] == $term->slug) ? 'selected' : '';
echo '<option value="' . esc_attr($term->slug) . '" ' . $selected . '>' . esc_html($term->name) . '</option>';
}
echo '</select>';
}
add_action('restrict_manage_users', 'wphierarchy_add_user_geo_filter');
function wphierarchy_filter_users_by_geo($query) {
global $pagenow;
if ('users.php' !== $pagenow || !isset($_GET['user_geo_filter']) || empty($_GET['user_geo_filter'])) {
return;
}
$geo_slug = sanitize_text_field($_GET['user_geo_filter']);
$tax_query = array(
array(
'taxonomy' => 'user_geo',
'field' => 'slug',
'terms' => $geo_slug,
),
);
add_filter('pre_get_users', function($user_query) use ($tax_query) {
$user_query->query_vars['tax_query'] = $tax_query;
return $user_query;
});
}
add_action('pre_get_users', 'wphierarchy_filter_users_by_geo');Этот код добавит выпадающий список для выбора географии и отфильтрует пользователей по выбранному термину.
Использование REST API для работы с географией пользователей
Так как мы зарегистрировали таксономию с параметром show_in_rest = true, география пользователей доступна через REST API WordPress. Это позволяет создавать фронтенд-приложения или расширенные административные панели с использованием JS-фреймворков.
Пример запроса для получения пользователей с определённой географией:
GET /wp-json/wp/v2/users?user_geo=moskvaДля полноценной работы с таксономией в REST API может потребоваться расширение стандартных эндпоинтов, но базовая функциональность уже доступна.
Полезные плагины для расширения возможностей
Если хочется упростить работу с иерархией пользователей по географии, можно использовать следующие плагины:
- Clearfy Pro — для оптимизации и управления ролями, правами и метаполями пользователей;
- WPRemark — для создания отзывов и комментариев с возможностью географической привязки;
- Тема Root — с расширенной поддержкой кастомных таксономий и REST API.
Заключение: расширяем иерархию географии по необходимости
Иерархия пользователей по географии — это мощный инструмент для сегментации пользователей и управления доступом в крупных и мультигеографических проектах на WordPress. В статье рассмотрен базовый пример создания пользовательской таксономии с иерархией, присвоения терминов, фильтрации в админке и работы через REST API. В зависимости от задач, можно расширять функционал с помощью метаполей, автоматизации и интеграции с плагинами.
Реализуйте этот подход, чтобы получить удобную и масштабируемую систему управления пользователями по географическому признаку в вашем проекте.