Как получить все таксономии для типа записи?
Как получить таксономии для типа записи?
Если у меня есть тип записи event
и мне нужно узнать список таксономий, которые прикреплены к этому типу записи. Как мне их найти?
Кажется, я разобрался! Изучив несколько функций в файле taxonomy.php WordPress, я обнаружил функцию get_object_taxonomies();
, которая решила мою проблему :)

Смотрите подробнее здесь: http://codex.wordpress.org/Function_Reference/get_object_taxonomies

Вау... полезно знать про get_object_taxonomies(). Это помогло мне перехватить template_redirect

Самый простой способ — просто отсортировать их с помощью цикла for
или foreach
.

Да, я получаю данные с помощью цикла foreach, но они упорядочены по имени `$taxonomies = get_object_taxonomies( array( 'post_type' => $post_type ) );
foreach( $taxonomies as $taxonomy ) :
// Получаем все "категории" (термины) в этой таксономии для получения соответствующих записей
$terms = get_terms( $taxonomy ); ?>
<ul class="specials"><?php foreach( $terms as $term ) : ?>
<li><h2><?php echo $term->name; ?></h2>`

@dh47 Я опоздал к обсуждению, но если тебе все еще интересно, думаю, тебе нужно использовать два цикла foreach
: один для сортировки, а другой для отображения. Также можно передать их в usort
перед циклом foreach
, чтобы отсортировать их как угодно.

Вот однострочник для отображения всех терминов для заданного объекта $post
(любого типа записи): array_map(function ($taxonomy) use($post) { return wp_get_post_terms($post->ID, $taxonomy); }, get_object_taxonomies($post))
// возвращает массив всех $terms из любой таксономии

get_categories отлично справится с этой задачей.
get_categories('taxonomy=taxonomy_name&type=custom_post_type');

Извините за поднятие старого поста, но я столкнулся с этой проблемой, когда искал решение для своего случая.
Мне нужно было получить все доступные таксономии для типа записи, а также все доступные термины для каждой таксономии.
Спасибо Нику Б за направление меня в правильное русло с его ответом: https://wordpress.stackexchange.com/a/357448/198353
// получаем список доступных таксономий для типа записи
$taxonomies = get_taxonomies(['object_type' => ['your_post_type']]);
$taxonomyTerms = [];
// перебираем таксономии
foreach ($taxonomies as $taxonomy)
{
// получаем все доступные термины, включая еще не использованные
$terms = get_terms(['taxonomy' => $taxonomy, 'hide_empty' => false]);
// убеждаемся, что $terms является массивом, так как может быть числом (количество) или WP_Error
$hasTerms = is_array($terms) && $terms;
if($hasTerms)
{
$taxonomyTerms[$taxonomy] = $terms;
}
}

Используйте get_object_taxonomies
(https://developer.wordpress.org/reference/functions/get_object_taxonomies/), которая принимает в качестве параметра либо название вашего пользовательского типа записи, либо объект записи:
$taxonomies = get_object_taxonomies('custom_post_type');
$taxonomies = get_object_taxonomies($custom_post_object);
get_taxonomies()
не возвращает таксономии, которые используются несколькими типами записей (https://core.trac.wordpress.org/ticket/27918).

Вы уже пробовали что-то сделать? Например, вот так:
<?php
$args=array(
'object_type' => array('event') // тип объекта
);
$output = 'names'; // или objects
$operator = 'and'; // 'and' или 'or'
$taxonomies=get_taxonomies($args,$output,$operator);
if ($taxonomies) {
foreach ($taxonomies as $taxonomy ) {
echo '<p>'. $taxonomy. '</p>';
}
}
?>

get_post_taxonomies()
https://developer.wordpress.org/reference/functions/get_post_taxonomies/
Это сработало у меня.
