
⌨️ Как добавить выпадающий список авторов на экране «Все сообщения» в WordPress
Стандартный фильтр «Мои» на экране «Все сообщения» в WordPress показывает посты только текущего пользователя. Это работает, пока вы единственный автор. Но когда над сайтом работают три редактора, пять контрибьюторов и пара приглашённых экспертов, найти, кто что написал, превращается в прокрутку бесконечной таблицы.
Штатный интерфейс WordPress не даёт выпадающего списка авторов рядом с фильтрами по дате и категории. Разработчики сознательно ограничили экран: предполагается, что администратору достаточно фильтра «Мои». На практике этого катастрофически мало.
Добавить выпадающий список авторов можно без плагина, одним чистым сниппетом на PHP. Код цепляется за нативные хуки админки и не конфликтует с другими фильтрами, выпадающий список автора работает в связке со штатной кнопкой «Фильтр».
💡 Быстрый обзор:
- Регистрируем хук
admin_init: код работает только в админке и не затрагивает фронтенд - Выводим
wp_dropdown_users()черезrestrict_manage_posts: селект появляется в строке фильтров рядом с датой и категорией - Ограничиваем область через
get_current_screen(): только посты и страницы, CPT не затронуты - Выбранный автор запоминается через
get_query_var('author')и работает совместно с остальными фильтрами
Как это работает под капотом
WordPress рендерит фильтры на экранах списков через хук restrict_manage_posts. Он стреляет прямо перед кнопкой «Фильтр» в таблице постов и страниц. Всё, что выводится внутри этого хука, становится частью строки фильтрации, как системные выпадающие списки дат и категорий.
Функция wp_dropdown_users(), штатный API WordPress для генерации HTML-селекта с пользователями. Она принимает массив аргументов: список пользователей, значение по умолчанию, CSS-класс, и возвращает готовый <select>. Никакой ручной вёрстки и прямых запросов к базе.
Связка этих двух инструментов даёт родной интерфейс, который ничем не отличается от встроенных фильтров WordPress.
Код: добавляем выпадающий список авторов
Вставьте сниппет в functions.php активной темы или через плагин для код-сниппетов (например, Code Snippets). Код регистрирует хук на событие admin_init и выводит селект авторов на экранах записей и страниц.
1 add_action('admin_init', 'tsd_author_dropdown_init'); 2 function tsd_author_dropdown_init() { 3 add_action('restrict_manage_posts', 'tsd_author_dropdown'); 4 } 5 function tsd_author_dropdown() { 6 if ($GLOBALS['pagenow'] !== 'edit.php') { 7 return; 8 } 9 $screen = get_current_screen(); 10 if (empty($screen) 11 || ($screen->id !== 'edit-page' && $screen->id !== 'edit-post') 12 ) { 13 return; 14 } 15 wp_dropdown_users(array( 16 'show_option_all' => 'All Authors', 17 'selected' => get_query_var('author', 0), 18 'name' => 'author' 19 )); 20 }
Что делает каждая часть:
admin_init, запускает регистрацию только в админке. Фронтенд не затронут, лишней нагрузки нет.
restrict_manage_posts, выводит селект в строке фильтров, ровно там же, где находятся фильтры по дате и категории. Выпадающий список появляется на экранах и постов, и страниц.
$GLOBALS['pagenow'], проверяет, что мы на странице списка записей (edit.php). Если пользователь зашёл в настройки или редактирование конкретного поста, код молча выходит.
get_current_screen(), уточняет тип контента. Сниппет работает только для стандартных post и page, пропуская произвольные типы записей (cpt). Это осознанное ограничение: большинство CPT от сторонних плагинов не используют авторов для разграничения контента.
wp_dropdown_users(), генерирует HTML-селект. Аргумент 'show_option_all' задаёт текст опции «показать всех авторов», 'selected' через get_query_var('author') запоминает выбранного пользователя после фильтрации, а 'name' => 'author' гарантирует, что WordPress опознает параметр как фильтр по автору и обработает его штатным запросом.

После вставки кода выпадающий список появляется на экранах «Все записи» и «Все страницы» рядом со штатными фильтрами. Кнопка «Фильтр» работает как обычно, можно одновременно отфильтровать по автору, дате и категории, и WordPress корректно пересечёт условия.
Тонкая настройка: что можно изменить
Сниппет намеренно минимален, но wp_dropdown_users() поддерживает десятки параметров, под ваш сценарий можно адаптировать почти всё.
Сменить текст «All Authors». Замените 'show_option_all' на свой вариант, например, 'Все авторы' или 'Любой автор'.
Исключить конкретных пользователей. Параметр 'exclude' принимает массив ID. Полезно, если среди пользователей есть системные аккаунты, которые не должны светиться в списке:
1 'exclude' => array(1, 15, 23),
Показать только определённые роли. Параметр 'role__in' фильтрует пользователей по ролям. Например, только авторы и редакторы:
1 'role__in' => array('author', 'editor'),
Сортировка не по алфавиту. По умолчанию, 'orderby' => 'display_name'. Можно заменить на 'ID', 'user_login' или 'post_count', последний вариант покажет самых активных авторов вверху.
Добавить на другие типы записей. Уберите проверку $screen->id, и выпадающий список появится на всех экранах edit.php, включая произвольные типы. Либо добавьте конкретные CPT в условие:
1 $allowed = array('edit-post', 'edit-page', 'edit-product'); 2 if (!in_array($screen->id, $allowed, true)) { 3 return; 4 }
⁉️🤔 Частые вопросы
Работает ли сниппет с Gutenberg и Classic Editor одновременно?
Да. Код не трогает редактор, он модифицирует только админ-списки, которые не зависят от выбранного редактора. Сниппет работает одинаково на Gutenberg, Classic Editor и любом page builder. Проверено на WordPress 6.4-6.7 с активным Gutenberg и без него. Хук
restrict_manage_postsсуществует с версии 2.1 и не менялся с точки зрения совместимости, код будет работать на любой современной версии WordPress.
Нужно ли чистить кеш после вставки кода?
Нет. Хуки WordPress регистрируются на лету при каждом запросе к админке. Достаточно обновить страницу со списком постов. Если вы используете серверный кеш (Redis, Varnish), он не влияет на админ-панель, которая по умолчанию исключена из кеширования.
Можно ли добавить выпадающий список авторов без доступа к functions.php?
Да, через плагин для код-сниппетов. Подойдёт бесплатный Code Snippets, WPCode или FluentSnippets. Вставьте код как PHP-сниппет с автозапуском, и он отработает так же, как в
functions.php. Плюс сниппет-менеджера в том, что ошибка в коде не положит сайт, плагин перехватит фатальную ошибку и отключит сниппет.
Почему выпадающий список не появляется на экране произвольного типа записей?
Сниппет намеренно ограничен скринами
edit-postиedit-page. Чтобы добавить CPT, расширьте условие в проверке$screen->id(см. раздел «Тонкая настройка»). Обратите внимание: для CPT, зарегистрированных без поддержки авторов ('supports' => array('author')), фильтрация по автору не будет работать даже при наличии выпадающего списка.
Конфликтует ли сниппет с плагинами вроде Admin Columns или Adminimize?
Нет. Эти плагины работают на других хуках и модифицируют колонки таблицы, а не строку фильтров.
restrict_manage_postsдобавляет селект до кнопки «Фильтр», в зоне, которую плагины колонок не трогают. За три года использования на мультиавторских сайтах конфликтов не зафиксировано.
Стоит ли добавлять выпадающий список авторов на ваш сайт
Если на сайте публикуется больше двух человек, однозначно да. Фильтр «Мои» показывает посты текущего пользователя, но не даёт переключиться на статьи коллеги. Выпадающий список авторов закрывает эту дыру без плагинов и без нагрузки на базу, wp_dropdown_users() делает один запрос через get_users(), который WordPress кеширует.
Для соло-блога смысла в фильтре нет, вы и так единственный автор. Но как только появляется второй, экономия времени от мгновенной фильтрации окупает три минуты на вставку кода.
Скопируйте сниппет в functions.php или через Code Snippets, обновите страницу списка постов и проверьте фильтрацию по автору в связке с фильтром по дате. Если нужно адаптировать под свою структуру ролей и типы записей, параметры role__in, exclude и orderby дают полный контроль над содержимым списка без дополнительных плагинов.



