Получить название таксономии текущей записи
Иерархическая таксономия для пользовательского типа записи 'projects' > 'projects_category'.
Два примера иерархий 'projects_category':
Крупные корпорации > 1-я компания > Заголовок поста
Малый бизнес > 2-я компания > Другой заголовок поста
Я могу получить '1-я компания' с помощью следующего кода:
<?php $terms = get_the_terms($post->ID, 'projects_category');foreach($terms as $term){echo $term->name;} ?>
Как можно вывести 'Крупные корпорации' или 'Малый бизнес' в зависимости от ситуации в single.php?
get_ancestors() должен сделать то, что вам нужно:
Таким образом, вам следует сделать что-то вроде этого:
$ancestors = get_ancestors($term_id, 'projects_category)

Но работает ли get_ancestors() с пользовательскими типами записей? У меня это, кажется, не работает...

Ваш вопрос на самом деле не связан с CPT (пользовательскими типами записей) - он касается пользовательских таксономий. Также убедитесь, что у вас WordPress 3.1 или выше

У меня последняя версия WP 3.2.1. Я указал, что это для пользовательских типов записей в первом абзаце своего вопроса, но возможно, дело скорее в пользовательских таксономиях? В любом случае ответ всё ещё ускользает от нас.

Вы можете использовать пользовательские типы записей (CPT), но вам нужно пройти по иерархии пользовательской таксономии — именно так работают 'terms' (термины) — элементы таксономии, которые можно прикрепить к объекту записи (будь то обычная запись, страница или пользовательский тип записи)

Я пробовал этот код <?php get_ancestors( $post->ID, 'projects_category' ); ?>, но он ничего не возвращает. Не могли бы вы подробнее разъяснить ваш ответ?

Я добавил пример использования в своем ответе — вы используете ID записи, когда нужно использовать ID термина. Это таксономия, а не пользовательский тип записи.

Это будет работать в single.php? У меня ничего не выводится, когда я попробовал. Как я уже сказал в вопросе, мне нужно это в single, а не в taxonomy шаблоне.

@anu давайте продолжим обсуждение в чате

Не имеет значения, какой шаблон вы используете. Получите ID термина, который вас интересует, и передайте его в get_ancestors. Код, который вы привели в вопросе, получает название термина, так что получите ID термина из этого и используйте его как входной параметр для get_ancestors. Вы пытаетесь найти родительский термин, а не родительскую запись. Не знаю, как объяснить это ещё понятнее.

Спасибо за попытку объяснить, пока не работает, но вы имели в виду что-то вроде этого: <?php $term = wp_get_post_terms( $post->ID, 'projects_category' ); $term_id = $term[0]->name; $ancestors = get_ancestors($term_id, 'projects_category'); echo $ancestors; ?>

$term[0]->name - это не ID термина - вам следует использовать $term[0]->term_id

В настоящее время только мой термин таксономии подуровня (1st Company Name) отмечен "галочкой" в админке. Нужно ли также отмечать "галочкой" термин таксономии верхнего уровня (Big Corporates) в админ-панели, чтобы его можно было получить таким способом?

Если вы прочитаете эту статью о пользовательских типах записей, она должна помочь: Повторное рассмотрение пользовательских типов записей, таксономий и постоянных ссылок

Это не помогло, я не увидел там ничего, что показывало бы, как получить название корневой таксономии в шаблоне single. В комментариях люди спрашивают, как это сделать, но решения не было опубликовано. Думаю, это не так просто реализовать для пользовательского типа записи.

Я отметил ответ anu и объяснение get_ancestors, однако вот как я решил задачу:
<?php
$terms = wp_get_object_terms($post->ID, 'projects_category', array('orderby' => 'term_id', 'order' => 'ASC') );
if ( !empty( $terms ) ) :
$project = array();
foreach ( $terms as $term ) {
$project[] = $term->name;
}
echo '<h1>'.$project[0].'</h1>';
echo '<h2>'.$project[1].'</h2>';
endif;
?>

Это отличный код для получения названия таксономии на странице детального просмотра или записи пользовательского типа поста в WordPress.
<?php
// Получаем термины таксономии 'projects_category' для текущего поста
$terms = get_the_terms($post->ID, 'projects_category');
// Выводим название каждого термина
foreach($terms as $term) {
echo $term->name;
}
?>
