Вопрос или проблема
Все (3) | Администратор (3)
Как я могу просто уменьшить значение на -1 в счетчиках “Все” и “Администратор”?
Здесь действительно не так много отличных хуков. Используется класс WP_Users_List_Table и хук views_users
, который можно использовать для парсинга и замены числа.
Хук дает нам массив ссылок следующим образом (несмотря на то, что это плоский массив, значение является ссылкой).
Array
(
[all] => Все (4)
[administrator] => Администратор (2)
[editor] => Редактор (2)
)
На мой взгляд, легче всего просто использовать regex для (2) и выполнить str_replace().
/**
* Изменить представления списка ролей в верхней части users.php
*
* @param array $user_roles
*
* @return array $user_roles
*/
add_filter( 'views_users', function( $user_roles ) {
$roles = array(
'administrator' => -1,
'editor' => +1,
);
foreach( $user_roles as $slug => $link ) {
// Пропустить - Слаг роли не существует в нашем массиве.
if( ! isset( $roles[ $slug ] ) ) { continue; }
// $matches = array( 0 => '(123)', 1 => 123 )
preg_match('/\((\d+)\)/', $link, $matches );
// Пропустить - Регулярное выражение не нашло совпадения
if( count( $matches ) < 2 ) { continue; }
// Изменить
$original_number = absint( $matches[1] );
$modified_number = $original_number + $roles[ $slug ];
// Заменить
$user_roles[ $slug ] = str_replace(
'(' . $original_number . ')',
'(' . $modified_number . ')',
$user_roles[ $slug ]
);
}
return $user_roles
} );
Это, конечно, не изменит список пользователей в таблице пользователей. Для этого вам нужно использовать pre_user_query
.
Альтернативно, представление действительно использует count_users()
, и существует хук pre_count_users
, но вам нужно будет прервать его выполнение и самостоятельно подсчитать пользователей с ролями.
Ответ или решение
Вопрос, связанный с фильтрацией списка пользователей и уменьшением отображаемого количества пользователей по ролям в WordPress, требует детального понимания структуры WordPress и методологии его работы с ролями и пользователями. Разберём теоретические аспекты, рассмотрим примерные решения и обсудим их применение.
Теория
WordPress использует определённую архитектуру для работы с пользователями и их ролями. В административной панели, на странице пользователей, отображаются различного рода статистики, включая количество пользователей с каждой ролью. Эти данные выводятся с помощью класса WP_Users_List_Table
, который и отвечает за представление данных в виде таблицы. Это включает создание вкладок, которые мы видим как "Все", "Администраторы", "Редакторы" и так далее.
Чтобы изменить количество пользователей, отображаемое возле каждой роли, мы можем использовать специальные хуки WordPress. В данном случае, полезным будет хук views_users
, который позволяет нам вмешиваться в процесс создания представления этих вкладок. Этот хук предоставляет массив ссылок, где каждая ссылка содержит текст с количеством пользователей в скобках.
Пример
Пример реализации решения на основе вышеупомянутого хука может выглядеть следующим образом:
/**
* Модификация представления списка ролей на странице пользователей
*
* @param array $user_roles
*
* @return array $user_roles
*/
add_filter('views_users', function($user_roles) {
$roles_to_modify = array(
'administrator' => -1,
'editor' => +1,
);
foreach ($user_roles as $slug => $link) {
if (!isset($roles_to_modify[$slug])) {
continue;
}
preg_match('/\((\d+)\)/', $link, $matches);
if (count($matches) < 2) {
continue;
}
$original_number = absint($matches[1]);
$modified_number = $original_number + $roles_to_modify[$slug];
$user_roles[$slug] = str_replace(
'(' . $original_number . ')',
'(' . $modified_number . ')',
$user_roles[$slug]
);
}
return $user_roles;
});
В данном коде мы используем регулярные выражения для поиска и замены количества пользователей, отображаемого в скобках. Мы создаём массив $roles_to_modify
, где для каждой роли указываем, на сколько нужно изменить количество. Далее мы перебираем каждую роль, проверяем, содержится ли она в нашем массиве, и если да, то изменяем количество пользователей.
Применение
Используя данный подход, вы можете тонко настраивать отображаемое количество пользователей в административной части WordPress. Это может быть полезно для внутренних целей, например, скрытия определённой части пользователей или создания собственного отчёта по ним.
Однако стоит учитывать, что данное изменение является исключительно косметическим и не влияет на реальные данные о пользователях в базе данных. Таким образом, если вам нужно изменить сам состав пользователей, например, исключить кого-либо из списка по определённому критерию, стоит рассмотреть использование хука pre_user_query
. Этот хук позволит вам модифицировать запросы, выполняемые к таблицам пользователей в базе данных.
Также можно упомянуть о хук pre_count_users
, который предоставляет возможность изменить способ подсчёта пользователей. Однако его использование требует самостоятельного подсчета пользователей с определёнными ролями и его применение в данном случае избыточно, учитывая всё необходимое можно сделать через views_users
.
На практике, взаимодействие с WordPress API, правильное использование хуков и знание внутренней архитектуры позволяет добиваться высоко точных кастомизаций под нужды бизнеса или личные предпочтения сопровождения сайтов. Любые изменения должны быть тщательно протестированы на тестовых средах перед реализацией в продакшене, чтобы избегать сбоев в работе системы.