Получение первого термина записи

10 мар. 2012 г., 03:13:27
Просмотры: 32.8K
Голосов: 11

Как мне получить только первый термин произвольного типа записи.
Я могу получить все - без проблем. Вот что я использую для получения всех терминов:

<?php 
// Перебор всех терминов
foreach ($terms as $term) {
    echo '<a href="'.get_term_link($term->slug, 'sitecat').'">'.$term->name.'</a>,';
} 
?> >> <a href="<?php the_permalink(); ?>"><?php the_title('', ''); ?></a></h2></span>

Буду признателен за ответ с использованием моего кода, но приветствуется любая помощь.

0
Все ответы на вопрос 5
2
30

Я не совсем понимаю, что вы имеете в виду под "первой" таксономией... но

$terms = get_the_terms( $post->ID, 'mytaxonomy' );

возвращает массив объектов терминов таксономии, поэтому

$term = array_pop($terms);

даст вам первый термин в массиве. И затем:

echo '<a href="'.get_term_link($term->slug, 'mytaxonomy').'">'.$term->name.'</a>,'

(Возможно, вам стоит добавить условные операторы if на случай, если вернется пустой массив или ошибка (см. is_wp_error))

10 мар. 2012 г. 04:05:35
Комментарии

ок.. ошибка была на моей стороне - не в твоем ответе ;) спасибо большое, приятель

Sagive Sagive
16 мар. 2012 г. 22:34:17

array_pop удалит и вернет последний элемент массива. Используйте array_shift для получения первого элемента. Обратите внимание, что обе эти функции сокращают исходный массив.

fonpacific fonpacific
23 окт. 2024 г. 11:26:16
1

Начиная с PHP 5.4, вы можете напрямую разыменовывать массив, поэтому для получения первого термина можно просто сделать следующее:

$first_term = get_the_terms( $post->ID, 'TAXONOMY_NAME' )[0];
var_dump( $first_term );

Если вам нужно конкретное свойство (например, название термина) первого термина, можно сделать так:

$first_term_name = get_the_terms( $post->ID, 'TAXONOMY_NAME' )[0]->name;
var_dump( $first_term_name );

ПРИМЕЧАНИЕ

У этого подхода есть недостатки: если таксономия не существует, вы получите объект WP_Error. Также, если возвращаемый массив пуст, будет выведено предупреждение о неопределённом ключе массива, поэтому используйте этот метод с осторожностью.

28 июл. 2015 г. 11:16:29
Комментарии

Как получить все ID терминов для каждого поста для использования на главной странице архива @pieter-goosen

Brad Dalton Brad Dalton
9 янв. 2022 г. 07:55:14
1

Как насчет прямого доступа к ключу объекта?

$terms = get_the_terms( $post->ID, 'sitecat' );
$first_term = $terms[0];

Таким образом, вы можете получить доступ к объекту.

echo $first_term->name;
28 июл. 2015 г. 11:06:00
Комментарии

Лучше проверить существование этого индекса, но и так сработает ;)

Sagive Sagive
9 июн. 2021 г. 17:54:33
2

Вот обобщение всех предыдущих ответов — вспомогательный сниппет, который я использую. Он выполняет все необходимые проверки и принимает те же аргументы, что и функция get_the_terms().

function getTheFirstTerm($post, $taxonomy) {
    $post = get_post( $post );
    if ( ! $post ) {
        return false;
    }

    $terms = get_the_terms( $post->ID, $taxonomy );

    if (!empty($terms)  && !is_wp_error( $terms )) {
        // Эта строка возвращает первый доступный объект термина, если он есть.
        return $terms[0];
    }

    return false;
}

Дополнительное примечание. Эта функция для простоты (что требуется в большинстве моих случаев) просто возвращает объект термина или false. Вы также можете вернуть WP_Error, если выше по коду нужно проверить его наличие, например:

if (!empty($terms)) {
   if(!is_wp_error( $terms )) {
       // Эта строка возвращает первый доступный объект термина.
       return $terms[0];
   } else {
       return $terms; // Это вернет объект WP_Error
   }       
}

Кроме того, вы можете отсортировать термины перед возвратом первого, например, чтобы получить первый объект термина по term_id, slug, name, menu order и т. д.

11 нояб. 2021 г. 02:44:03
Комментарии

Спасибо за ваш ответ, j.w. ;)

Sagive Sagive
11 нояб. 2021 г. 02:55:40

Вы можете указать в вашем коде, какая часть отвечает за первый термин, чтобы другие пользователи могли эффективно обращаться к ней.

西門 正 Code Guy - JingCodeGuy 西門 正 Code Guy - JingCodeGuy
11 нояб. 2021 г. 10:59:49
3

Это сработало у меня. Выводит только первую категорию в виде текста, без ссылки.

$terms = get_the_terms( $post->ID , 'ваша_пользовательская_таксономия' ); 
foreach( $terms as $term ) { 
    print $term->name;
    break;
    unset($term);
}
4 мар. 2014 г. 14:23:08
Комментарии

Что "сработало у вас"? Примечание: break; действительно остановит выполнение вашего оператора, unset никогда не сработает, и будет обработан только первый элемент.

kaiser kaiser
4 мар. 2014 г. 14:57:27

unset( $term ); должен быть после вашего цикла foreach, а не внутри него :-)

Pieter Goosen Pieter Goosen
28 июл. 2015 г. 11:18:11

Это не сработает, если возвращаемые термины являются WP_Error.

J. Wrong J. Wrong
11 нояб. 2021 г. 02:40:45