get_the_terms
не принимает массив в качестве второго параметра.
get_the_terms (int | object $ post, строка $ taxonomy)
Параметры:
$post
(int | object) (обязательно) ID сообщения или объект.
$taxonomy
(строка) (обязательно) Имя таксономии.
Подробнее о get_the_terms
По умолчанию get_the_terms
не имеет опций сортировки. Но вы можете использовать usort
для сортировки возвращаемого массива.
Итак, ваша последняя часть кода должна быть:
$terms = get_lowest_taxonomy_terms(get_the_terms( get_the_ID(), 'destinations' ));
Это быстрый пример того, как вы можете отсортировать его, используя usort
:
$terms = get_the_terms( get_the_ID(), 'destinations' );
usort($terms,"so980_sort_terms_alphabetically");
function so980_sort_terms_alphabetically($a,$b) {
return $a['slug'] > $b['slug'];//using 'slug' as sorting order
}
so980_sort_terms_alphabetically
функция должна быть в файле functions.php
вашей темы.
Итак, наконец, ваша последняя часть станет:
$terms = get_the_terms( get_the_ID(), 'destinations' );
usort($terms,"so980_sort_terms_alphabetically");
$terms = get_lowest_taxonomy_terms($terms);
Обновление
Я только что проверил это, и он возвращает фатальную ошибку, так как я допустил ошибку. Сообщение об ошибке: Fatal error: Cannot use object of type WP_Term as array
.
get_the_terms
возвращает объект. Таким образом, использование $a['slug']
вызывало ошибку.
Здесь so980_sort_terms_alphabetically
должно быть реализовано следующим образом:
function so980_sort_terms_alphabetically($a,$b) {
return $a->slug > $b->slug;//using 'slug' as sorting order
}
** Это проверено и работает.
Обновление 2
Поскольку ваши выходные коды недоступны в вашем вопросе, я предполагаю, что вы печатаете внутри цикла. Вместо этого мы будем сохранять возвращенные термины в другом массиве и сортировать их вне цикла, чтобы мы могли получить все термины одновременно.
Вот краткий пример того, как вы можете это сделать:
if ($loop->have_posts()) :
while ($loop->have_posts()) : $loop->the_post();
$pre_terms = get_lowest_taxonomy_terms(get_the_terms(get_the_ID(), 'product_tag'));
if ( $pre_terms ) {
foreach ( $pre_terms as $pre_term ) {
$terms[] = $pre_term;
}
}
endwhile;
endif;
usort($terms,"so980_sort_terms_alphabetically");
//a quick test to see if it's working or not
foreach ( $terms as $term ) {
echo $term->slug;
echo '<br/>';
}