Таблицы списка администратора WordPress: добавление пользовательских фильтров

Опубликовано: 2021-02-26

Большая часть информации о ваших страницах и сообщениях в панели администратора WordPress организована в виде таблиц. Любой, кто использует WordPress, будет знаком с ними. Они хорошо работают и позволяют вам выполнять «быстрое редактирование» определенной страницы или информации о публикации, отображать дату публикации публикации или страницы и многое другое. Кроме того, вы, возможно, заметили, что вы можете фильтровать эти таблицы с помощью раскрывающихся меню, которые появляются в верхней части каждой таблицы.

Однако есть только несколько фильтров. Итак, что вы делаете, если хотите отфильтровать значение, для которого нет поля фильтра в панели администратора? К счастью, WordPress позволяет нам добавлять собственные фильтры. Мы собираемся увидеть, как.

Зачем использовать пользовательские фильтры ?

Итак, зачем вам нужны какие-то настраиваемые фильтры для организации таблиц администратора в WordPress? Давайте представим, что у нас есть сайт с большим количеством авторов постов и множеством постов.

Разместите свой сайт с Pressidium

60- ДНЕВНАЯ ГАРАНТИЯ ВОЗВРАТА ДЕНЕГ

ПОСМОТРЕТЬ НАШИ ПЛАНЫ

Вы можете просмотреть автора сообщения из таблицы администратора без каких-либо изменений. В настоящее время вы не можете сортировать сообщения по авторам. Очевидно, что это серьезное ограничение, если вы хотите иметь возможность легко просматривать все сообщения, написанные конкретным автором. Было бы полезно, если бы вы могли просмотреть раскрывающееся меню всех авторов сообщений, а затем выбрать одного из списка. Это действительно может ускорить процесс.

Давайте посмотрим, как мы могли бы построить это.

Создание нашего пользовательского фильтра

Чтобы помочь вам создавать собственные фильтры, WordPress предоставляет хуки restrict_manage_posts и pre_get_posts .

В файле wp-admin/includes/class-wp-posts-list-table.php в строке 557 введено restrict_manage_posts , которое срабатывает до того, как над списком таблиц администратора будет создана кнопка «Фильтр».

Мы будем использовать пользовательскую функцию и, как обычно, свяжем ее с хуком restrict_manage_posts (дополнительную информацию об этом см. здесь). Перейдите в основную папку вашей активной темы и откройте файл functions.php в своем любимом редакторе. В конце содержимого файла вставьте следующий код:

 function my_author_filter(){ $screen = get_current_screen(); global $post_type; if( $screen->id == 'edit-post' ){ $my_args = array( 'show_option_all' => 'All Authors', 'orderby' => 'display_name', 'order' => 'ASC', 'name' => 'authors_admin_filter', 'who' => 'authors', 'include_selected' => true ); if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); } wp_dropdown_users($my_args); } } add_action('restrict_manage_posts','my_author_filter');

Основное условие, которое мы использовали, это if( $screen->id == 'edit-post') . Здесь мы использовали функцию WordPress get_current_screen() , которая возвращает идентификатор экрана, на котором мы находимся.

В этом случае идентификатор экрана администратора — «edit-post». Другими словами, мы убеждаемся, что находимся на экране администрирования сообщений. Если бы, например, мы хотели применить это к экрану администратора страниц, мы должны использовать if( $screen->id == 'edit-page' или если бы мы работали над пользовательским типом сообщения, edit-{post_type} будет правильный оператор if.

Примечание. Чтобы узнать, какой идентификатор соответствует каждому экрану администратора, вы можете проверить официальную документацию по ссылке на экран администратора.

В приведенном ниже коде мы проверяем, выбран ли уже автор, и если да, то применяем выбранное значение:

 if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); }

Наконец, используя функцию WordPress wp_dropdown_users , мы создадим раскрывающийся список авторов в соответствии с аргументами, которые мы определили ранее.

Затем мы выбрали текст, который будет отображать параметр «показать все» в аргументе show_option_all . Мы выбрали строку «Все авторы». В аргументе «имя» мы заполняем желаемое имя для выпадающего списка. Мы будем использовать это значение позже для фильтрации результатов списка сообщений.

В аргументе «кто» мы определяем, какой тип пользователей запрашивать, в нашем случае «авторов». С помощью аргумента include_selected мы выбираем, хотим ли мы включить выбранный идентификатор пользователя в раскрывающийся список.

На этом этапе, если вы обновите экран сообщений администратора, вы должны увидеть раскрывающееся меню автора рядом с другими встроенными меню фильтров.

Если вы выберете значение и нажмете «Фильтровать», значение останется выбранным после перезагрузки страницы, но результаты не изменятся. На следующем шаге мы внесем необходимые изменения, чтобы отфильтровать список сообщений, чтобы отображались только сообщения, связанные с выбранным нами автором.

Фильтрация результатов

Опять же, фильтр pre_get_posts сделает свою работу. Мы рассмотрели этот хук в нашей статье WordPress Admin Search: Расширение результатов. Мы будем использовать это снова, чтобы изменить объект переменной запроса, созданный на экране пост-администрирования, до того, как будет запущен фактический запрос. В ваш functions.php вставьте следующие строки:

 function my_author_filter_results($query){ $screen = get_current_screen(); global $post_type; if ( $screen->id == 'edit-post' ) { if(isset($_GET['authors_admin_filter'])){ $author_id = sanitize_text_field($_GET['authors_admin_filter']); if($author_id != 0){ $query->query_vars['author'] = $author_id; } } } } add_action('pre_get_posts','my_author_filter_results');

Основное условие, как и ранее, здесь также необходимо, чтобы убедиться, что мы находимся на экране постов администратора.

$author_id = sanitize_text_field($_GET['authors_admin_filter']); сохраняет выбранный идентификатор автора в переменной $author_id . После этого, если идентификатор автора не равен 0 (выбраны все авторы), мы передаем значение $author_id в параметре автора запроса.

Вот и все. Теперь будут отображаться только те сообщения, которые принадлежат выбранному автору/пользователю.

Вывод

Пользовательская фильтрация на экранах администратора может сделать ваш контент легко доступным для поиска пользователями-администраторами, что может быть неоценимо, когда у вас много сообщений или страниц. И, конечно же, это всего лишь один из возможных способов использования фильтра в таблицах администратора. Существует множество альтернативных способов, которыми вы можете найти это полезным, и, надеюсь, методы, которые мы здесь описали, помогут вам создать свои собственные фильтры.

Например, вы можете создать раскрывающееся меню фильтра с параметрами для отображения сообщений, созданных за последние 30 дней, или, возможно, фильтр, который сортирует сообщения по любой таксономии. Список query_vars может помочь вам провести мозговой штурм возможных вариантов!.

Получайте удовольствие, играя с этой замечательной функцией!

Смотрите также

Таблицы списка администратора WordPress: добавление пользовательских фильтров
Начало работы с пользовательскими полями WordPress