Показать все слаги wp_get_post_terms
Я использую следующий код для отображения слагов моей пользовательской таксономии. Однако он показывает только первую категорию, а не все связанные категории. Я знаю, что это довольно просто и связано с [0], но я не могу понять, как это изменить.
// Получаем все термины для поста
$getslugid = wp_get_post_terms( $post->ID, 'opd_taggallery' );
// Получаем только первый слаг
$getslug = $getslugid [0]->slug;
echo $getslug;
Основная функция WordPress wp_list_pluck()
должна значительно упростить эту задачу.
$getslugid = wp_get_post_terms( $post->ID, 'opd_taggallery' );
$slugs = implode(', ',wp_list_pluck($getslugid,'slug'));
echo $slugs;

+1, даже не знал об этой функции. Хотя она также использует foreach (с точки зрения производительности), я все же предпочитаю свое решение, так как у меня есть точный контроль и я могу использовать несколько полей объекта.

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

Это скорее вопрос по PHP, но решение простое — вам нужно использовать цикл foreach
для $getslug
, потому что вы просто выводите slug первой таксономии.
Функция wp_get_post_terms()
возвращает не один объект, а массив объектов. Вы правы насчёт [0]
, это указывает на то, что вы проверяете первую запись в этом массиве.
Ваша функция должна выглядеть примерно так:
$getslugid = wp_get_post_terms( $post->ID, 'opd_taggallery' );
foreach( $getslugid as $thisslug ) {
echo $thisslug->slug . ' '; // Добавлен пробел между слагами с помощью . ' '
}

В новых версиях WordPress появилась возможность напрямую запрашивать только ярлыки таксономий. Я думаю, это стало доступно с введением класса WP_Term_Query в WordPress версии 4.6.0.
$slugs = wp_get_post_terms( $post->ID, 'opd_taggallery', array(
'fields' => 'id=>slug',
) );
echo implode( " ", $slugs );
