Сортировка терминов таксономии в алфавитном порядке
У меня есть следующий запрос:
<?php
$args = array(
'hide_empty' => false, // не скрывать пустые термины
'orderby' => 'title',
'order' => 'DESC'
);
$terms = get_terms( 'projets-location', $args );
if ( !empty( $terms ) && !is_wp_error( $terms ) ){
foreach ( $terms as $term ) { ?>
<h5 id="<?php echo $term->slug; ?>" class="filter-menu-item" data-filter=".<?php echo $term->slug; ?>">
<strong><?php echo $term->name; ?></strong>
</h5>
<?php }
} ?>
который показывает все термины таксономии из projets-location
. Я добавил атрибуты orderby
и order
, но они ВСЕ ЕЩЕ не отображаются в алфавитном порядке. Я что-то делаю не так, или есть какая-то ошибка? Буду благодарен за любые предложения!

Согласно WordPress Codex для функции get_terms
по этой ссылке
https://developer.wordpress.org/reference/functions/get_terms/, следующие поля терминов принимаются в аргументе order_by
: 'name', 'slug', 'term_group', 'term_id', 'id', 'description'
. Вы используете title
, которого нет в списке допустимых полей, поэтому это может быть причиной проблемы.

Мне не удалось отсортировать по имени с помощью аргумента orderby, поэтому я просто использовал функцию сортировки ::
// сортировка по имени ASC - измените > на < для сортировки DESC
function sortByName($a, $b) {
return $a->name > $b->name;
}
$terms = get_terms( 'projets-location', $args );
usort($subterms, 'sortByName');
foreach ( $terms as $term ) {
....

Попробуйте с wpdb
<?php
global $wpdb;
$terms = $wpdb->get_results( "
SELECT
t.name,
t.slug
FROM
{$wpdb->prefix}term_taxonomy AS tt
INNER JOIN
{$wpdb->prefix}terms AS t
ON t.term_id = tt.term_id
WHERE
tt.taxonomy = 'projets-location'
ORDER BY
t.name DESC
" );
if ( !empty( $terms ) && !is_wp_error( $terms ) ){
foreach ( $terms as $term ) { ?>
<h5 id="<?php echo $term->slug; ?>" class="filter-menu-item" data-filter=".<?php echo $term->slug; ?>">
<strong><?php echo $term->name; ?></strong>
</h5>
<?php }
} ?>
