Skip to content

Все для WordPress, веб-розробки — і не тільки

⌨️ Як додати випадаючий список авторів на екрані «Всі повідомлення» в WordPress

⌨️ Як додати випадаючий список авторів на екрані «Всі повідомлення» в 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 і виводить селект авторів на екранах записів і сторінок.

1add_action('admin_init', 'tsd_author_dropdown_init');
2function tsd_author_dropdown_init() {
3 add_action('restrict_manage_posts', 'tsd_author_dropdown');
4}
5function tsd_author_dropdown() {
6 if ($GLOBALS['pagenow'] !== 'edit.php') {
7 return;
8 }
9 $screen = get_current_screen();
10 if (empty($screen)
11 || ($screen-&gt;id !== 'edit-page' && $screen-&gt;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

Після вставки коду випадний список з’являється на екранах «Всі записи» та «Всі сторінки» поруч зі штатними фільтрами. Кнопка «Фільтр» працює як зазвичай, можна одночасно відфільтрувати за автором, датою та категорією, і 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');
2if (!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 дають повний контроль над вмістом списку без додаткових плагінів.