Вы когда-нибудь сталкивались с такой ситуацией, когда создав пользовательский тип записи, затем обнаруживали, что в списках администратора отображаются только названия и даты ваших публикаций? WordPress поможет вам создать требуемый уровень таксономии (иерархическая классификация объектов или основополагающих принципов классификации, систематика).
Добавить релевантную на первый взгляд информацию не так уж сложно; в этой статье мы рассмотрим, как модифицировать Admin post lists (управление списками публикаций) в WordPress.
Следующая информация поможет вам убедиться в том, что вы попали на нужную страницу. Управление списком представляет собой таблицу публикаций, отображаемых в разделе администрирования при нажатии на «Posts» (публикации), «Pages» (страницы) или другие типы пользовательских публикаций. Прежде чем мы углубимся в особенности процесса модификации, стоит отметить, что таблицы администрирования создаются с помощью класса WP_List_Table
. Джереми Десво де Мариньи (Jeremy Desvaux de Marigny) написал замечательную статью с использованием родных таблиц администратора, в которой объясняется, как организовать подходящую рабочую область.
В этой статье мы сосредоточимся на том, как можно расширить существующие таблицы. Мы сделаем это на примере недавно созданной темы под названием Rock Band. Rock Band включает в себя управление событиями, а это означает, что нам потребуются специальные элементы интерфейса и некоторые детали, которые позволят сделать раздел администрирования более полезным!
Создание пользовательского типа публикации.
Этот процесс довольно прост и подробно описан в «Полном руководстве по созданию пользовательских типов публикаций». Все что нам нужно это объявить метки, которые мы собираемся использовать и выполнить несколько настроек. Откройте файл functions.php
и разместите в нем следующий фрагмент.
add_action( 'init', 'bs_post_types' );
function bs_post_types() {
$labels = array(
'name' => __( 'Events', THEMENAME ),
'singular_name' => __( 'Event', THEMENAME ),
'add_new' => __( 'Add New', THEMENAME ),
'add_new_item' => __( 'Add New Event', THEMENAME ),
'edit_item' => __( 'Edit Event', THEMENAME ),
'new_item' => __( 'New Event', THEMENAME ),
'all_items' => __( 'All Event', THEMENAME ),
'view_item' => __( 'View Event', THEMENAME ),
'search_items' => __( 'Search Events', THEMENAME ),
'not_found' => __( 'No events found', THEMENAME ),
'not_found_in_trash' => __( 'No events found in Trash', THEMENAME ),
'menu_name' => __( 'Events', THEMENAME ),
);
$supports = array( 'title', 'editor' );
$slug = get_theme_mod( 'event_permalink' );
$slug = ( empty( $slug ) ) ? 'event' : $slug;
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => $slug ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => $supports,
);
register_post_type( 'event', $args );
}
Быстрая метка.
Используя в настройках темы постоянную ссылку, вы должны убедиться, что пользователи вашей теме могут устанавливать свои собственные постоянные ссылки. Это важно для многоязычных сайтов, на которых администраторы могут захотеть убедиться, что URL-адреса могут быть прочитаны пользователями.
Мы получаем список публикаций, как показано выше. Это лучше, чем ничего, но отсутствует некоторая важная информация. Информация о месте выполнения события, времени начала и текущем статусе будет очень кстати, поэтому нужно заполнить существующие пробелы!
Добавление заголовков в пользовательскую таблицу.
На протяжении всего процесса модификации, мы ни при каких обстоятельствах не будем напрямую затрагивать класс WP_Lists_Table
. Это отличная новость! Поскольку мы будем использовать хуки, то наш код будет иметь приятное визуальное оформление и модульную конструкцию, благодаря чему его можно будет легко настраивать.
Добавить заголовок так же просто, как и изменить значение массива. Это звучит как работа для фильтра!
add_filter('manage_event_posts_columns', 'bs_event_table_head');
function bs_event_table_head( $defaults ) {
$defaults['event_date'] = 'Event Date';
$defaults['ticket_status'] = 'Ticket Status';
$defaults['venue'] = 'Venue';
$defaults['author'] = 'Added By';
return $defaults;
}
Обратите внимание на имя фильтра: оно соответствует имени типа публикации, который мы создали. Это означает, что вы можете выполнять изменения таблицы любого типа публикации, а не только свои настройки. Просто используйте manage_post_posts_columns
для модификации столбцов в таблице регулярных публикаций.
После того, как этот код будет размещен в функциональном файле, вы должны увидеть в таблице четыре новых заголовка. В полях пока еще отсутствует какое-либо содержимое; мы должны решить, что в них будет отображено.
Заполнение!
Процесс добавления данных для каждого столбца имеет примерно такую же «сложность», как и создание дополнительных колонок.
add_action( 'manage_event_posts_custom_column', 'bs_event_table_content', 10, 2 );
function bs_event_table_content( $column_name, $post_id ) {
if ($column_name == 'event_date') {
$event_date = get_post_meta( $post_id, '_bs_meta_event_date', true );
echo date( _x( 'F d, Y', 'Event date format', 'textdomain' ), strtotime( $event_date ) );
}
if ($column_name == 'ticket_status') {
$status = get_post_meta( $post_id, '_bs_meta_event_ticket_status', true );
echo $status;
}
if ($column_name == 'venue') {
echo get_post_meta( $post_id, '_bs_meta_event_venue', true );
}
}
Как видно из структуры этой функции, она вызывается отдельно для каждого столбца. Из-за этого, мы должны проверять, какой столбец отображается в данный момент, и только затем размещать соответствующие данные.
Нужные нам данные хранятся в таблице postmeta
. Вот как это сделать:
- Данные события запоминаются благодаря использованию
_bs_meta_event_date
ключа. - Для текущего состояния использован
_bs_meta_event_ticket_status
ключ. - Для места хранения использован
_bs_meta_event_venue
мета ключ.
Поскольку все эти значения относятся к postmeta
, мы просто должны использовать функцию get_post_meta()
, чтобы получить их. За исключением даты, мы сразу же можем передать эти значения.
Мы подходим к важному моменту. Вы не ограничены в отображении отдельных фрагментов данных или в отображении ссылок. Как бы там ни было, все ваши выходные данные будут показаны. Если вы располагаете достаточным количеством времени, то можно прикрепить календарь с датами, которые будут отображаться при наведении курсора мышки. Вы можете создать всплывающие меню, которые открываются по щелчку, и так далее.
Вы, наверное, заметили, что внешний вид стал намного лучше. Перед нами появилась информация о дате события (event date), текущем статусе (ticket status), месте проведения (venue) и авторе (author). Мы получаем фактически информативную таблицу, а не просто способ изменения страниц. Тем не менее, мы можем сделать немного больше.
Упорядочение столбцов.
Чтобы добавить возможность упорядочения колонок нужно выполнить два довольно простых шага. Во-первых, нужно использовать фильтр, который поможет определить, какие из ваших колонок должны быть отсортированы, добавив их в массив. Затем нужно создать фильтр …
Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров