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

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

HIT

24.12.2015

2126

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

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

Вставляем в 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,
		'exclude_from_search' => false, // исключить тип записи из результатов поиска
		'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 минут.