Управление большим количеством записей в админке WordPress может стать неудобным без правильной настройки отображения колонок. В этой статье мы подробно разберём, как оптимизировать колонки в списках записей, страниц и других типов контента, чтобы сделать админку более удобной и информативной.
Зачем оптимизировать колонки в админке WordPress
Стандартный список записей в WordPress показывает только базовые колонки: заголовок, автора, категории, теги, дату. Но при работе с кастомными типами записей или большим объёмом данных этого часто недостаточно. Добавление нужных колонок помогает быстро получить важную информацию и улучшить рабочий процесс.
Оптимизация колонок особенно актуальна в следующих случаях:
- Использование кастомных типов записей с уникальными метаполями.
- Необходимость отображать дополнительные данные, например, статусы или пользовательские поля.
- Ускорение обработки контента без перехода в каждую запись.
Мы рассмотрим примеры, как добавить, удалить и настроить колонки с помощью кода и популярных плагинов.
Как добавить и настроить колонки для стандартных и кастомных типов записей
Добавление новых колонок с помощью хуков WordPress
Для настройки колонок в админке используются фильтры manage_{$post_type}_posts_columns и экшены manage_{$post_type}_posts_custom_column. Они позволяют добавить новые колонки и вывести в них нужные данные.
Пример: добавим колонку «ID записи» в список записей:
add_filter('manage_posts_columns', 'wpfreecourses_add_id_column');
function wpfreecourses_add_id_column($columns) {
$columns = array_slice($columns, 0, 1, true) +
['post_id' => 'ID'] +
array_slice($columns, 1, null, true);
return $columns;
}
add_action('manage_posts_custom_column', 'wpfreecourses_show_id_column', 10, 2);
function wpfreecourses_show_id_column($column_name, $post_id) {
if ($column_name === 'post_id') {
echo $post_id;
}
}Такой код добавит колонку с ID записи сразу после чекбокса. Аналогично можно добавить свои колонки для кастомных типов записей, заменив posts на нужный тип, например, manage_product_posts_columns.
Удаление ненужных колонок
Если стандартные колонки мешают или не нужны, их можно убрать, удалив соответствующие ключи из массива. Например, чтобы убрать колонку «Теги»:
add_filter('manage_posts_columns', 'wpfreecourses_remove_tags_column');
function wpfreecourses_remove_tags_column($columns) {
if (isset($columns['tags'])) {
unset($columns['tags']);
}
return $columns;
}Это помогает сделать интерфейс более чистым и удобным.
Отображение данных из метаполей и таксономий в колонках
Чтобы вывести данные из пользовательских полей (метаполей) или таксономий, в функции, которая выводит содержимое колонки, нужно получить эти данные по ID записи.
Пример: добавим колонку с метаполем «Цена» для кастомного типа записи product:
add_filter('manage_product_posts_columns', 'wpfreecourses_add_price_column');
function wpfreecourses_add_price_column($columns) {
$columns['price'] = 'Цена';
return $columns;
}
add_action('manage_product_posts_custom_column', 'wpfreecourses_show_price_column', 10, 2);
function wpfreecourses_show_price_column($column_name, $post_id) {
if ($column_name === 'price') {
$price = get_post_meta($post_id, 'price', true);
echo $price ? esc_html($price) : '-';
}
}Для таксономий вывод осуществляется через функцию get_the_term_list() или get_the_terms(). Например, для вывода категорий товара:
add_filter('manage_product_posts_columns', 'wpfreecourses_add_category_column');
function wpfreecourses_add_category_column($columns) {
$columns['product_cat'] = 'Категория';
return $columns;
}
add_action('manage_product_posts_custom_column', 'wpfreecourses_show_category_column', 10, 2);
function wpfreecourses_show_category_column($column_name, $post_id) {
if ($column_name === 'product_cat') {
$terms = get_the_terms($post_id, 'product_cat');
if (!empty($terms) && !is_wp_error($terms)) {
$out = [];
foreach ($terms as $term) {
$out[] = esc_html($term->name);
}
echo implode(', ', $out);
} else {
echo '-';
}
}
}Плагины для удобного управления колонками в админке
Если не хочется писать код, можно использовать готовые решения. Вот несколько популярных плагинов для управления колонками:
- Admin Columns — мощный и удобный плагин для добавления, удаления и сортировки колонок в админке. Позволяет работать с метаполями, таксономиями и даже пользовательскими полями.
- Codepress Admin Columns — базовая версия плагина Admin Columns с бесплатным функционалом, подходящим для большинства задач.
- WP Sheet Editor — позволяет редактировать контент прямо в виде таблицы с колонками, что удобно для массового редактирования.
Плагины имеют визуальные интерфейсы для настройки колонок, сортировки и фильтрации, что значительно упрощает работу без необходимости писать код.
Добавление сортировки и фильтров по своим колонкам
Для улучшения админки полезно сделать колонки сортируемыми и добавить фильтры по ним. Это особенно важно для метаполей.
Сделаем колонку «Цена» сортируемой
add_filter('manage_edit-product_sortable_columns', 'wpfreecourses_make_price_sortable');
function wpfreecourses_make_price_sortable($columns) {
$columns['price'] = 'price';
return $columns;
}
add_action('pre_get_posts', 'wpfreecourses_price_column_orderby');
function wpfreecourses_price_column_orderby($query) {
if (!is_admin()) return;
$orderby = $query->get('orderby');
if ('price' === $orderby) {
$query->set('meta_key', 'price');
$query->set('orderby', 'meta_value_num');
}
}Этот код сделает колонку с метаполем «Цена» сортируемой по числовому значению.
Добавление фильтра по таксономии
add_action('restrict_manage_posts', 'wpfreecourses_filter_by_product_cat');
function wpfreecourses_filter_by_product_cat() {
global $typenow;
if ($typenow === 'product') {
$taxonomy = 'product_cat';
$selected = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : '';
$info_taxonomy = get_taxonomy($taxonomy);
wp_dropdown_categories(array(
'show_option_all' => "Все {$info_taxonomy->label}",
'taxonomy' => $taxonomy,
'name' => $taxonomy,
'orderby' => 'name',
'selected' => $selected,
'show_count' => true,
'hide_empty' => true,
));
}
}
add_filter('parse_query', 'wpfreecourses_convert_filter_query');
function wpfreecourses_convert_filter_query($query) {
global $pagenow;
$post_type = isset($_GET['post_type']) ? $_GET['post_type'] : '';
$taxonomy = 'product_cat';
$q_vars = &$query->query_vars;
if ($pagenow == 'edit.php' && $post_type == 'product' && isset($_GET[$taxonomy]) && is_numeric($_GET[$taxonomy]) && $_GET[$taxonomy] != 0) {
$term = get_term_by('id', $_GET[$taxonomy], $taxonomy);
if ($term) {
$q_vars[$taxonomy] = $term->slug;
}
}
}Так можно отфильтровать записи по выбранной категории таксономии.
Практические советы по оптимизации работы с колонками
Чтобы админка оставалась удобной и быстрой, соблюдайте несколько правил:
- Добавляйте только необходимые колонки, чтобы не загромождать интерфейс.
- Используйте сортировку и фильтры, чтобы быстро находить нужные записи.
- Для сложных проектов применяйте плагины с визуальным управлением.
- Проверяйте производительность при добавлении сложных запросов в колонки.
Оптимизация колонок значительно экономит время администраторов и редакторов сайта, позволяя работать эффективнее.