Иногда в процессе разработки или администрирования сайта на WordPress возникает задача добавить возможность фильтрации записей по авторам в разделе «Все записи» админ-панели. Это особенно актуально, если на сайте много авторов, и нужно быстро найти контент конкретного пользователя без использования сторонних плагинов.
Почему стандартного фильтра по авторам может не хватать
По умолчанию WordPress предоставляет фильтр по авторам в списке записей, но он доступен только администраторам и редакторам. Иногда требуется расширить функционал, например, добавить фильтрацию для других ролей, кастомных типов записей или доработать внешний вид фильтра.
Также бывают случаи, когда нужно фильтровать записи по нескольким авторам одновременно или по определённым критериям, связанным с пользователями.
Добавляем фильтр по авторам в админке для кастомных типов записей
Рассмотрим, как добавить фильтр по авторам для кастомного типа записи wpreboot_post. Для этого нужно использовать хук restrict_manage_posts и добавить селектор авторов.
function wpreboot_add_author_filter_for_custom_post_type() {
global $typenow;
if ($typenow === 'wpreboot_post') {
$users = get_users(['who' => 'authors']);
echo '<select name="author" id="dropdown_author">';
echo '<option value="">Все авторы</option>';
foreach ($users as $user) {
$selected = (isset($_GET['author']) && $_GET['author'] == $user->ID) ? 'selected' : '';
echo "<option value=\"{$user->ID}\" $selected>{$user->display_name}</option>";
}
echo '</select>';
}
}
add_action('restrict_manage_posts', 'wpreboot_add_author_filter_for_custom_post_type');
Этот код добавит выпадающий список авторов в админке для кастомного типа записи wpreboot_post. После выбора автора и нажатия кнопки «Фильтр» список записей обновится, показывая только записи выбранного автора.
Обработка фильтра — корректный запрос к базе
Для того чтобы фильтр корректно работал, необходимо дополнительно изменить запрос с помощью хука pre_get_posts. Это позволит правильно отфильтровать записи по выбранному автору.
function wpreboot_filter_posts_by_author_in_admin($query) {
global $pagenow;
$post_type = isset($_GET['post_type']) ? $_GET['post_type'] : '';
if (is_admin() && $pagenow == 'edit.php' && $post_type == 'wpreboot_post' && isset($_GET['author']) && $_GET['author'] != '') {
$query->set('author', intval($_GET['author']));
}
}
add_action('pre_get_posts', 'wpreboot_filter_posts_by_author_in_admin');
Теперь админка будет корректно отображать записи по выбранному автору для кастомного типа wpreboot_post.
Фильтрация по нескольким авторам одновременно
Если есть задача фильтровать записи сразу по нескольким авторам, стандартный селектор не подходит, так как он позволяет выбрать только одного автора. Для реализации мультивыбора можно использовать расширенный селектор с поддержкой мультивыбора, например, Select2 или Chosen, подключить его стили и скрипты и доработать обработку параметров.
Пример упрощённого подхода без сторонних библиотек, где авторы перечисляются через запятую в GET-параметре authors:
function wpreboot_add_multiauthor_filter() {
global $typenow;
if ($typenow === 'wpreboot_post') {
$users = get_users(['who' => 'authors']);
$selected_authors = isset($_GET['authors']) ? explode(',', $_GET['authors']) : [];
echo '<input type="text" name="authors" placeholder="ID авторов через запятую" value="' . esc_attr(implode(',', $selected_authors)) . '" style="width:200px;"/>';
}
}
add_action('restrict_manage_posts', 'wpreboot_add_multiauthor_filter');
function wpreboot_filter_posts_by_multiple_authors($query) {
global $pagenow;
$post_type = isset($_GET['post_type']) ? $_GET['post_type'] : '';
if (is_admin() && $pagenow == 'edit.php' && $post_type == 'wpreboot_post' && !empty($_GET['authors'])) {
$authors = array_map('intval', explode(',', $_GET['authors']));
$query->set('author__in', $authors);
}
}
add_action('pre_get_posts', 'wpreboot_filter_posts_by_multiple_authors');
Такой способ позволяет фильтровать записи по нескольким авторам, указав их ID через запятую в поле фильтра. Это удобно, если нет желания подключать дополнительные библиотеки для мультивыбора.
Использование плагина Clearfy для расширенного управления админкой
Если хочется получить расширенные возможности фильтрации и управления отображением записей в админке без кастомного кода, можно рассмотреть плагин Clearfy Pro. Этот плагин предлагает массу инструментов для оптимизации и настройки WordPress, в том числе гибкие фильтры и управление колонками в админке.
Выводы и рекомендации
Фильтрация записей по авторам в админке — полезный инструмент для сайтов с большим количеством контента и авторов. С помощью простого кода можно добавить удобный селектор, который даст быстрый доступ к нужным записям. Для более сложных задач стоит рассмотреть расширенные методы и готовые решения, например, плагин Clearfy.
Практический совет: всегда проверяйте права доступа пользователей при добавлении фильтров в админке, чтобы не раскрывать лишнюю информацию.