/ Wordpress / Пользовательские типы записей и таксономии

Пользовательские типы записей и таксономии

HIT

24.12.2015

1944

Пользовательские типы записи и таксономии дают огромные возможности расширения функционала сайта.

Пользовательский тип записи

Вставляем в funсtions.php

Пользовательский тип записи по-умолчанию выводится в результатах поиска, чтобы не выводить — необходимо добавить параметр ‘exclude_from_search’ => true
// Пользовательский тип записи

add_action( 'init', 'register_post_type_track' ); // Использовать функцию только внутри хука init
 
function register_post_type_track() {
 $labels = array(
 'name' => 'Трэк',
 'singular_name' => 'Track', // админ панель Добавить->Функцию
 'add_new' => 'Добавить трек',
 'add_new_item' => 'Добавить новый трек', // заголовок тега <title>
 'edit_item' => 'Редактировать трек',
 'new_item' => 'Новый трек',
 'all_items' => 'Все треки',
 'view_item' => 'Просмотр страницу трека на сайте',
 'search_items' => 'Искать трек',
 'not_found' => 'Трек не найден.',
 'not_found_in_trash' => 'В корзине нет трека.',
 'menu_name' => 'Музыка' // ссылка в меню в админке
 );
 $args = array(
 'labels' => $labels,
 'public' => true,
 <strong>'exclude_from_search' => false,</strong> // исключить тип записи из результатов поиска
 'show_ui' => true, // показывать интерфейс в админке
 'has_archive' => true, 
 'menu_icon' => get_stylesheet_directory_uri() .'/img/music_icon.png', // иконка в меню
 'menu_position' => 20, // порядок в меню
 'supports' => array( 'title', 'editor', 'comments', 'author', 'thumbnail'),
 'taxonomies' => array('category') // добавляем поддержку стандартных таксономий 'post_tag', 'category', либо пользовательскую 'album' (через запятую)
 );
 register_post_type('track', $args);
}

Чтобы в произвольный тип записи добавить редактор Guttenberg нужно добавить еще один параметр
‘show_in_rest’ => true,

// Тексты уведомлений для типа постов

add_filter( 'post_updated_messages', 'true_post_type_messages' );
 
function true_post_type_messages( $messages ) {
 global $post, $post_ID;
 
 $messages['track'] = array( // track - название созданного нами типа записей
 0 => '', // Данный индекс не используется.
 1 => sprintf( 'Трек обновлена. <a href="%s">Просмотр</a>', esc_url( get_permalink($post_ID) ) ),
 2 => 'Трек обновлён.',
 3 => 'Трек удалён.',
 4 => 'Трек обновлен.',
 5 => isset($_GET['revision']) ? sprintf( 'Трек восстановлен из редакции: %s', wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
 6 => sprintf( 'Трек опубликован на сайте. <a href="%s">Просмотр</a>', esc_url( get_permalink($post_ID) ) ),
 7 => 'Трек сохранен.',
 8 => sprintf( 'Отправлен на проверку. <a target="_blank" href="%s">Просмотр</a>', esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
 9 => sprintf( 'Запланирован на публикацию: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Просмотр</a>', date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
 10 => sprintf( 'Черновик обновлён. <a target="_blank" href="%s">Просмотр</a>', esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
 );
 
 return $messages;
}

Иконку пункта меню можно делать картинкой, как в примере выше
‘menu_icon’ => get_stylesheet_directory_uri() .’/img/music_icon.png’, // иконка png в меню

или применить стандартный для админки wordpress набор иконок Dashicons
‘menu_icon’ => ‘dashicons-format-audio’, // иконка dashicons в меню

Навигация на следующие и предыдущие пользовательские записи, а также ссылка на архив пользовательских записей данного типа:

<!-- Навигация пользовательских записей --> 
 
<?php if( is_singular('track') ) : ?> 

<a href="<?php echo get_post_type_archive_link($post_type); ?>"><p><i class="fa fa-level-up"></i>Перейти к списку пользовательских записей</p></a>

<hr class="line-wt">
<div id="nav-left"><?php previous_post_link( '%link' ) ?></div>
<div id="nav-right"><?php next_post_link( '%link' ) ?></div>

<?php endif; ?>

Вывод общего количества записей произвольного типа:

<?php echo wp_count_posts('project')->publish; ?>

Пользовательский тип таксономии

Вставляем в funсtions.php

// Пользовательская таксономия
function add_new_taxonomies() {
/* создаем функцию с произвольным именем и вставляем в неё register_taxonomy() */
register_taxonomy('album',
array('track'),
array(
'hierarchical' => false, // true - по типу рубрик, false - по типу меток, по умолчанию - false 
'labels' => array(
/* ярлыки, нужные при создании UI, можете не писать ничего, тогда будут использованы ярлыки по умолчанию */
'name' => 'Альбом',
'singular_name' => 'Album',
'search_items' => 'Найти альбом',
'popular_items' => 'Популярные альбомы',
'all_items' => 'Все альбомы',
'parent_item' => null,
'parent_item_colon' => null,
'edit_item' => 'Редактировать альбом',
'update_item' => 'Обновить альбом',
'add_new_item' => 'Добавить новый альбом',
'new_item_name' => 'Название нового альбома',
'separate_items_with_commas' => 'Разделяйте альбомы запятыми',
'add_or_remove_items' => 'Добавить или удалить альбом',
'choose_from_most_used' => 'Выбрать из наиболее часто используемых альбомов',
'menu_name' => 'Альбомы'
),
'public' => true, // каждый может использовать таксономию, либо только администраторы, по умолчанию - true
'show_in_nav_menus' => true, // добавить на страницу создания меню
'show_ui' => true, // добавить интерфейс создания и редактирования
'show_tagcloud' => true, // нужно ли разрешить облако тегов для этой таксономии
'update_count_callback' => '_update_post_term_count', // callback-функция для обновления счетчика $object_type
'query_var' => true, // разрешено ли использование query_var, также можно указать строку, которая будет использоваться в качестве него, по умолчанию - имя таксономии
'rewrite' => array(
/* настройки URL пермалинков */
'slug' => 'album', // ярлык
'hierarchical' => true // разрешить вложенность

),
)
);
}
add_action( 'init', 'add_new_taxonomies', 0 );

Поделиться в соц. сетях:

  • Комментарии
  • Вложения

Добавить комментарий

Пока нет комментариев. Будь первым!

Пользовательские типы записей и таксономии
Несколько авторов записи
Рекомендации для васНесколько авторов записиOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.