Получить первый пост срок

10

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

<?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>

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

Сагив SEO
источник

Ответы:

23

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

$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)

Стивен Харрис
источник
только что попробовал это .. получаю ошибку: Исправляемая фатальная ошибка: объект класса WP_Error не может быть преобразован в строку в /home/content/14/6469114/html/wp-content/themes/sagive/single-website.php on line 40
Sagive SEO
в строке 40: <? php $ rules = get_the_terms ($ post-> ID, 'sitecat'); array_pop ($ термины); echo '<a href="'.get_term_link($term-> slug,' sitecat ').' "> '. $ term-> name.' </a> '; ?>
Sagive SEO
хорошо .. ошибка была на моей стороне - не ваш ответ;) большое спасибо друг
Sagive SEO
4

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

Питер Гусен
источник
0

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

$terms = get_the_terms( $post->ID , 'your_custom_taxonomy' ); 
foreach( $terms as $term ) { 
    print $term->name;
    break;
    unset($term);
}
Панкай
источник
1
Что "сработало для тебя"? Sidenote: break;действительно остановит ваше утверждение, unsetникогда не сработает и будет обработан только 1-й элемент.
Кайзер
unset( $term );должно быть после вашей foreachпетли, а не внутри нее :-)
Питер Гусен
0

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

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

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

echo $first_term->name;
Лафиф Астахдзик
источник