Ordenar términos de taxonomía en orden alfabético

4 may 2017, 20:05:15
Vistas: 23.7K
Votos: 1

Tengo la siguiente consulta:

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

que muestra todos los términos de taxonomía de la taxonomía projets-location, he añadido los atributos orderby y order arriba pero AÚN NO se están mostrando en orden alfabético, ¿estoy siendo tonto aquí o hay algo que estoy haciendo mal? ¡Cualquier sugerencia sería muy apreciada!

0
Todas las respuestas a la pregunta 4
2

Desde la versión 4.5.0, las taxonomías deben pasarse a través del argumento 'taxonomy' en el array $args:

$terms = get_terms( array(
    'taxonomy' => 'projets-location',
    'orderby' => 'name',
    'order' => 'DESC' 
) );
4 may 2017 21:53:36
Comentarios

Acabo de intentar esto pero no tuve éxito?

user1374796 user1374796
4 may 2017 23:21:08

no funciona en WP 5.3

niki niki
28 mar 2020 08:13:02
1

Según el Codex de WordPress para get_terms en este enlace https://developer.wordpress.org/reference/functions/get_terms/, los siguientes campos de términos son aceptados en el argumento order_by: 'name', 'slug', 'term_group', 'term_id', 'id', 'description' y estás usando title que no está entre los campos de términos aceptados, por lo que ese podría ser el problema.

4 may 2017 20:20:05
Comentarios

incluso siguiendo esto, todavía no los están ordenando en absoluto :(

user1374796 user1374796
4 may 2017 20:45:38
0

No logré ordenar por nombre usando el argumento orderby, así que simplemente usé una función de ordenación ::

// ordenar por nombre ASC - cambia > por < para ordenar DESC
function sortByName($a, $b) {
    return $a->name > $b->name;
}

$terms = get_terms( 'projets-location', $args );
usort($subterms, 'sortByName');

foreach ( $terms as $term ) {
   ....
21 jun 2018 12:38:25
0

Prueba con 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 may 2021 21:33:50