После регистрации кастомного типа публикации в WP, вы выполучите новый раздел в адимнке, возможность добавлять и редактировать публикации данного типа.
В общем списке записей будет скорее всего два столбца — заголовок и дата. Для кастомных типов этого не достаточно, потому что в большинстве случаев они создаются с расширенным набором полей, мета значений, собственными словарями, и др. дополнительными полями.
Я покажу как добавить столбцы в список записей и вывести их значения.
Легче показывать на каком то примере. Для начала нам нужен кастомный тип публикации. Как их регистрировать в wordpress читайте тут.
Я создам тип материала — филиалы (filials) с описанием представительств компании в разных городах России.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
//подцепляем регистрацию к секции init add_action( 'init', 'create_post_type' ); function create_post_type() { //Регистрируем тип публикации - филиалы register_post_type( 'filials', array( 'public' => true, 'has_archive' => true, 'menu_icon' => 'dashicons-location-alt', 'menu_position' => 3, 'labels' => array( 'name' => 'Магазины', 'singular_name' => 'Филиалы', 'menu_name' => 'Филиалы', 'all_items' => 'Все филиалы', 'add_new' => 'Добавить', 'add_new_item' => 'Добавить', 'edit_item' => 'Редактировать', 'not_found' => 'Ничего не найдено', 'not_found_in_trash' => 'Корзина пуста' ), 'supports' => array('title', 'custom-fields'), )); //тут же регистрируем словарь терминов register_taxonomy( 'fil_type', 'filials', array( 'hierarchical' => true, 'label' => 'Типы филиалов', 'query_var' => true, 'rewrite' => true ) ); } |
У филиала будет собственный словарь терминов — тип филиала (fil_type). Я буду указывать, прикрепляя термины данного словаря, что это за филиал. К примеру, это может быть «склад», «офис», «розничная точка» или «производство».
Добавленные custom_fields, я буду использовать для указания города, соответствующего филиалу. В редакторе создам произвольное поле — City.
После создания некоторого числа записей филиалов, возникает проблема с их идентификацией в общем списке. Хотелось бы увидеть в каком городе они находятся и какого типа, не заходя в каждую запись. Добавим дополнительные столбцы. :)
Нам помогут две зацепки:
- Фильтр (filter) manage_{post-type}_posts_columns — передаёт список столбцов для таблицы;
- Действие (action) manage_posts_custom_column — позволяет задавать значения в этих столбцах.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//добавим столбцы в список филиалов add_filter('manage_filials_posts_columns' , 'manage_filials_columns'); add_action('manage_posts_custom_column' , 'all_custom_columns', 10, 2); function manage_filials_columns($cols) { //мы полностью пересоздадим список //не будем использовать значения $cols return array( 'cb' => '<input type="checkbox" />', 'title' => 'Название', 'taxonomy_type' => 'Тип филиала', 'City' => 'Город' ); } //вывод кастомных полей function all_custom_columns( $column, $post_id ) { switch ( $column ) { case 'taxonomy_type': //словарь таксономии FIL_TYPE $terms = get_the_term_list( $post_id, 'fil_type', '', ', ', '' ); if ( is_string( $terms ) ) echo $terms; else echo "-"; break; case 'City': echo get_post_meta( $post_id, 'City', true ); break; } } |
В all_custom_columns передаётся название столбца, как мы его объявили в manage_filials_columns и ID записи. Остаётся из нужной нам публикации извлечь соотвествующие данные и показать их.
Код зацепок размещается в отдельном плагине или functions.php вашей темы.