Получение первого термина записи
Как мне получить только первый термин произвольного типа записи.
Я могу получить все - без проблем. Вот что я использую для получения всех терминов:
<?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>
Буду признателен за ответ с использованием моего кода, но приветствуется любая помощь.

Я не совсем понимаю, что вы имеете в виду под "первой" таксономией... но
$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
))

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

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

Начиная с 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
. Также, если возвращаемый массив пуст, будет выведено предупреждение о неопределённом ключе массива, поэтому используйте этот метод с осторожностью.

Вот обобщение всех предыдущих ответов — вспомогательный сниппет, который я использую. Он выполняет все необходимые проверки и принимает те же аргументы, что и функция 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 и т. д.

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

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