Задать вопрос

Поддержка меток (тегов) в custom post type wordpress?

Приветствую!
Уважаемые, помогите разобраться, не получается вывести метки wordpress.
Перечислю все по порядку, возможно кто-то знает где ошибка.

Так добавляю поддержку меток для кастомного типа записей:
add_action( 'init', 'mbds_products_custom_post_types' );

function mbds_products_custom_post_types() {
	$labels = array(
		'name'               => _x( 'Продукция', 'post type general name' ),
		'singular_name'      => _x( 'Продукция', 'post type singular name' ),
		'menu_name'          => _x( 'Продукция', 'admin menu' ),
		'name_admin_bar'     => _x( 'Продукция', 'add new on admin bar' ),
		'add_new'            => _x( 'Добавить продукт', 'mbds_products' ),
		'add_new_item'       => __( 'Добавить новый продукт' ),
		'new_item'           => __( 'Новый продукт' ),
		'edit_item'          => __( 'Редактировать продукт' ),
		'view_item'          => __( 'Показать продукт' ),
		'all_items'          => __( 'Вся продукция' ),
		'search_items'       => __( 'Найти продукт' ),
		'not_found'          => __( 'Продукция не найдена' ),
		'not_found_in_trash' => __( 'Нет продукции в корзине' )
	);

	$args = array(
		'labels'             => $labels,
 		'description'        => __( 'Описание.' ),
		'public'             => true,
		'publicly_queryable' => true,
		'show_ui'            => true,
		'show_in_menu'       => true,
		'query_var'          => true,
		'rewrite'            => true,
		'capability_type'    => 'post',
		'has_archive'        => true,
		'hierarchical'       => false,
		'menu_position'      => 8,
		'menu_icon'          => 'dashicons-portfolio',
		'supports'           => array( 'title', 'thumbnail', 'page-attributes', 'editor' ),
		//'rewrite'            => array( 'slug' => 'products')
	);

	  $tag_labels = array(
	    'name' => _x( 'Теги', 'taxonomy general name' ),
	    'singular_name' => _x( 'Тег', 'taxonomy singular name' ),
	    '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' => __( 'Теги' ),
	  );

	register_taxonomy('mbds_products_tag',
		array('mbds_products'),
		array(
			'hierarchical' => false, //true - по типу рубрик, false - по типу меток, по умолчанию - false 
			'labels' => $tag_labels,
			'show_ui' => true,
			'update_count_callback' => '_update_post_term_count',
			'query_var' => true, 
		)
	);

	register_post_type( 'mbds_products', $args );
}


И вот поддержка меток добавлена, в админке, в редакторе записи появились метки. Пока все отлично.
Добавляю метки к записям, метки добавляются, все хорошо.

Но вот вывести их на странице ну никак вообще не получается(
Перепробовал ВСЕ функции для работы с метками - не выводятся хоть убей.
НО при явном указании таксономии - wp_tag_cloud() их видит!
wp_tag_cloud( array( 'taxonomy' => 'mbds_products_tag' ) );

wp_tag_cloud выводит метки! НО выводит ВСЕ созданные метки, а это не нужно.
Нужны метки только тех записей, которые "сейчас" выведены, которые сейчас в выборке в цикле WP_Query.

Итак, как минимум убедились что они (метки) есть, значит они работают и осталось понять почему не получается вывести нужные, а не вообще ВСЕ метки.
По другому получилось добраться до опять-таки ВСЕХ меток так:
get_terms( 'mbds_products_tag' );
get_terms( 'mbds_products_tag' ) - тоже самое, получает массив с объектами ВСЕХ меток.

Все действие происходит на странице taxonomy-catalog.php
Задача получить и вывести не ВСЕ существующие метки, а только те, которые добавлены к записям в выборке.
taxonomy-catalog.php работает так, структура такая:
На странице родительского каталога (Кухни) - выводятся все его записи и записи всех дочерних его каталогов (т.е. вообще все кухни).
На странице вложенного (дочернего) каталога (Угловые кухни) - выводятся только его записи, т.е. только угловые кухни.
И здесь же нужно получить метки, метки только угловых кухонь, которые сейчас "показаны" в выборке.
Сама выборка:
$category_obj = get_queried_object();
$term = $category_obj->slug;

$args = array(
	'post_type' => 'mbds_products',
	'tax_query' => array(
		array(
			'taxonomy' => 'catalog',
			'field'    => 'slug',
			'terms'    => $term
		)
	)
);

$query = new WP_Query( $args );
while ( $query->have_posts() ) : $query->the_post();

	// тут нужно получить метки, но не получается
	$posttags = get_the_tags();
	var_dump($posttags);  // выводит boolean false

wp_reset_postdata();
endwhile;
wp_reset_query();


Надеюсь это длинное описание кто-то поймет и возможно что-то подскажет.
Нужно получить метки только тех товаров, которые есть в выборке.
Спасибо!
Если ваш совет решит проблему - готов посильно поблагодарить за ваш бесценный опыт
  • Вопрос задан
  • 3878 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@AndreyBLG Автор вопроса
Вот так получилось добиться нужного!
Здесь при регистрации нового типа записей не регистрируется новая таксономия для меток, а в аргументы, одной строкой, добавляется параметр 'taxonomies' => array('post_tag') , выделил его переносами строк.
Метки, добавленные таким способом, работают как надо.

Остается вопрос почему не работал первый способ, может кто знает?
Для лучшего понимания WP было бы полезно.

Рабочий код добавления меток к кастомному типу записей:
add_action( 'init', 'mbds_products_custom_post_types' );

function mbds_products_custom_post_types() {
	$labels = array(
		'name'               => _x( 'Продукция', 'post type general name' ),
		'singular_name'      => _x( 'Продукция', 'post type singular name' ),
		'menu_name'          => _x( 'Продукция', 'admin menu' ),
		'name_admin_bar'     => _x( 'Продукция', 'add new on admin bar' ),
		'add_new'            => _x( 'Добавить продукт', 'mbds_products' ),
		'add_new_item'       => __( 'Добавить новый продукт' ),
		'new_item'           => __( 'Новый продукт' ),
		'edit_item'          => __( 'Редактировать продукт' ),
		'view_item'          => __( 'Показать продукт' ),
		'all_items'          => __( 'Вся продукция' ),
		'search_items'       => __( 'Найти продукт' ),
		'not_found'          => __( 'Продукция не найдена' ),
		'not_found_in_trash' => __( 'Нет продукции в корзине' )
	);

	$args = array(
		'labels'             => $labels,
        'description'        => __( 'Описание.' ),
		'public'             => true,
		'publicly_queryable' => true,
		'show_ui'            => true,
		'show_in_menu'       => true,
		'query_var'          => true,
		'rewrite'            => true,
		'capability_type'    => 'post',
		'has_archive'        => true,
		'hierarchical'       => false,
		'menu_position'      => 8,
		'menu_icon'          => 'dashicons-portfolio',
		'supports'           => array( 'title', 'thumbnail', 'page-attributes', 'editor' ),

		// добавит поддержку меток к custom post type
		'taxonomies' => array('post_tag')
	);

	register_post_type( 'mbds_products', $args );
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
maxxannik
@maxxannik
Сайты на WordPress + Интернет магазины WooCommerce
Попробуйте аргумент hide_empty = true.
Как то так:

wp_tag_cloud( array( 
  'taxonomy' => 'mbds_products_tag',
  'hide_empty' => true
) );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы