Фильтрация записей по таксономиям в консоли WordPress

Опубликовано 8 лет назад

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

WordPress уже давно (очень давно!) вышел за рамки обычной блоговой CMS, являясь сегодня одной из самых универсальных и многоцелевых платформ, на которой решаются задачи самой разной направленности. Это и блоги, и лендинги, и различные информационные ресурсы, порталы, корпоративные сайты, каталоги, интернет-магазины. И даже форумы, социальные сети и целые сети пользовательских сайтов. Список можно продолжать бесконечно.

С помощью кастомных типов данных (Custom Post Types), таксономий и произвольных полей (Custom fields) в WordPress можно создавать любые структуры данных. Это сильно помогает при разработке интернет-магазинов, различных каталогов и других веб-приложений с большим массивом данных, объекты которых имеют большое количество характеристик, связей и т.д. WordPress позволяет с легкостью генерировать и сортировать во фронтенде любые, даже самые сложные выборки объектов.

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

Рассмотрим конкретный случай из практики.

Дано:

Кастомный тип данных «Портфолио», зарегистрированный в WordPress как «portfolio», а также две привязанные к ней таксономии «Категория» (portfolio_category) и «Заказчики» (portfolio_client).

Задача:

Реализовать возможность фильтрации по пользовательским таксономиям в листинге записей типа данных «Портфолио» внутри консоли управления WordPress. Говоря простым языком, контент-менеджеру необходима возможность видеть списки работ, выполненные для того или иного заказчика, а также иметь возможность вывода работ в зависимости от выбранной категории.

Решение:

Сразу замечу, для того чтобы в листинге записей появилась колонка с таксономией, необходимо при её регистрации, задать ‘show_admin_column’ => true.

register_taxonomy( 'portfolio_category', 'portfolio', array(
'hierarchical' => true,
'label' => 'Категория',
'show_admin_column' => true,
'query_var' => true,
'rewrite' => true
)
);

Тогда листинг записей будет выглядеть таким образом.

Листинг записей с таксономиями WordPress

Что уже заметно упрощает визуальный анализ информации.

Но мы пойдем дальше и сделаем ещё и фильтрацию.

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

// Фильтрация записей по таксономиям
function danilin_add_taxonomy_filters() {
global $typenow;
// таксономии
$taxonomies = array('portfolio_category','portfolio_client');
// пользовательский тип данных
if( $typenow == 'portfolio' ){
foreach ($taxonomies as $tax_slug) {
$tax_obj = get_taxonomy($tax_slug);
$tax_name = $tax_obj->labels->name;
$terms = get_terms($tax_slug);
if(count($terms) > 0) {
echo "<select name='$tax_slug' id='$tax_slug' class='postform'>";
echo "<option value=''>$tax_name</option>";
foreach ($terms as $term) {
echo '<option value='. $term->slug, $_GET[$tax_slug] == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')</option>';
}
echo "</select>";
}
}
}
}
add_action( 'restrict_manage_posts', 'danilin_add_taxonomy_filters' );

В коде я отметил места, где задаётся пользовательский тип данных и массив таксономий, для которых будет применяться фильтрация.

Результат работы функции выглядит следующим образом.

Фильтрация записей по таксономиям в консоли WordPress

Как видим, теперь контент-менеджеру будет гораздо проще и комфортнее работать с большими объёмами данных.

Задача решена.

Иван Данилин
Автор Иван Данилин

Фулстек веб‑разработчик, специализируюсь на платформе WordPress

Подробнее
Комментарии
  1. Здравствуйте.
    У вас статья как создать фильтр постов или страниц в админ-панели.
    А нехотите написать статью, как то же самое сделать на фронэнде ?
Добавить комментарий