Как модифицировать управление списками публикаций в WordPress.

Вы когда-нибудь сталкивались с такой ситуацией, когда создав пользовательский тип записи, затем обнаруживали, что в списках администратора отображаются только названия и даты ваших публикаций? 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-адреса могут быть прочитаны пользователями.

events_original

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

Добавление заголовков в пользовательскую таблицу.

На протяжении всего процесса модификации, мы ни при каких обстоятельствах не будем напрямую затрагивать класс 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(), чтобы получить их. За исключением даты, мы сразу же можем передать эти значения.

Мы подходим к важному моменту. Вы не ограничены в отображении отдельных фрагментов данных или в отображении ссылок. Как бы там ни было, все ваши выходные данные будут показаны. Если вы располагаете достаточным количеством времени, то можно прикрепить календарь с датами, которые будут отображаться при наведении курсора мышки. Вы можете создать всплывающие меню, которые открываются по щелчку, и так далее.

events_data

Вы, наверное, заметили, что внешний вид стал намного лучше. Перед нами появилась информация о дате события (event date), текущем статусе (ticket status), месте проведения (venue) и авторе (author). Мы получаем фактически информативную таблицу, а не просто способ изменения страниц. Тем не менее, мы можем сделать немного больше.

Упорядочение столбцов.

Чтобы добавить возможность упорядочения колонок нужно выполнить два довольно простых шага. Во-первых, нужно использовать фильтр, который поможет определить, какие из ваших колонок должны быть отсортированы, добавив их в массив. Затем нужно создать фильтр …

Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.