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

13 июл. 2011 г., 10:16:30
Просмотры: 17.1K
Голосов: 4

Иерархическая таксономия для пользовательского типа записи '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?

0
Все ответы на вопрос 4
14

get_ancestors() должен сделать то, что вам нужно:

Таким образом, вам следует сделать что-то вроде этого:

$ancestors = get_ancestors($term_id, 'projects_category)
13 июл. 2011 г. 13:33:17
Комментарии

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

Andy Andy
13 июл. 2011 г. 13:47:21

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

anu anu
13 июл. 2011 г. 13:52:25

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

Andy Andy
13 июл. 2011 г. 13:58:39

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

anu anu
13 июл. 2011 г. 14:03:09

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

Andy Andy
13 июл. 2011 г. 14:09:38

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

anu anu
13 июл. 2011 г. 14:13:31

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

Andy Andy
13 июл. 2011 г. 14:17:28

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

Andy Andy
13 июл. 2011 г. 14:23:33

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

anu anu
13 июл. 2011 г. 14:25:46

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

Andy Andy
13 июл. 2011 г. 14:39:03

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

anu anu
13 июл. 2011 г. 17:08:14

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

Andy Andy
14 июл. 2011 г. 12:08:51

Попробуйте и убедитесь!

anu anu
14 июл. 2011 г. 14:33:41

Когда оба флажка установлены, get_ancestors действительно возвращает и категорию, и родительскую категорию в алфавитном порядке. Есть ли способ извлечь названия категорий с верхнего и нижнего уровней отдельно? Чтобы одну можно было поместить в H1, а другую в H2.

Andy Andy
15 июл. 2011 г. 10:32:27
Показать остальные 9 комментариев
2

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

13 июл. 2011 г. 11:15:12
Комментарии

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

Andy Andy
13 июл. 2011 г. 11:34:06

А, понял, что ты имеешь в виду. Извини, но у меня тоже нет ответа на этот вопрос.

Nsokyi Nsokyi
13 июл. 2011 г. 12:31:22
0

Я отметил ответ 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;
    ?>
16 июл. 2011 г. 10:31:44
0

Это отличный код для получения названия таксономии на странице детального просмотра или записи пользовательского типа поста в WordPress.

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