Сортировка терминов таксономии в алфавитном порядке

4 мая 2017 г., 20:05:15
Просмотры: 23.7K
Голосов: 1

У меня есть следующий запрос:

<?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, но они ВСЕ ЕЩЕ не отображаются в алфавитном порядке. Я что-то делаю не так, или есть какая-то ошибка? Буду благодарен за любые предложения!

0
Все ответы на вопрос 4
2

Начиная с версии 4.5.0, таксономии следует передавать через аргумент 'taxonomy' в массиве $args:

$terms = get_terms( array(
    'taxonomy' => 'projets-location',
    'orderby' => 'name',
    'order' => 'DESC' 
) );
4 мая 2017 г. 21:53:36
Комментарии

Я только что попробовал это, но безрезультатно?

user1374796 user1374796
4 мая 2017 г. 23:21:08

не работает на WP 5.3

niki niki
28 мар. 2020 г. 08:13:02
1

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

4 мая 2017 г. 20:20:05
Комментарии

даже после этого они всё равно не заказывают их :(

user1374796 user1374796
4 мая 2017 г. 20:45:38
0

Мне не удалось отсортировать по имени с помощью аргумента 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 ) {
   ....
21 июн. 2018 г. 12:38:25
0

Попробуйте с 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 }
} ?>
28 мая 2021 г. 21:33:50