web-dev-qa-db-fra.com

get_the_terms par ordre alphabétique décroissant

J'affiche une liste de termes auxquels une publication est affectée en utilisant les éléments suivants:

<?php 
$terms = get_the_terms( $post->ID , 'winetype' ); 
$sep = ', '; 
foreach ( $terms as $term ) { 
echo $term->name; 
echo $sep; 
} ?>

Mais nous voudrions que la sortie soit dans l'ordre alphabétique décroissant (Z-A), je ne trouve pas le moyen d'utiliser order => DESC pour cela, des suggestions?

Merci beaucoup à l'avance.

4
Adrian

Vous pouvez essayer ceci:

// Get posts terms
$terms = wp_get_post_terms( $post->ID, 'winetype', array( 'order' => 'DESC') );

$sep = ', '; 
foreach ( $terms as $term ) { 
    echo $term->name; 
    echo $sep; 
} 
6
Robbert

Utilisez wp_get_post_terms() à la place:

<?php
$names = wp_get_post_terms(
    $post->ID,
    'winetype',
    array(
        'orderby' => 'name',
        'order' => 'DESC',
        'fields' => 'names'
    );

echo implode(', ', $names); // to avoid trailing separator

Mise à jour en vertu de @Pieter Goosen commentaire.

$terms = get_the_terms( $post->ID , 'winetype' ); 

if($terms) { // check the variable is not empty

    // compare terms
    function cmp($a, $b)
    {
        return strcmp($b->name, $a->name); // in reverse order to get DESC
    }

    // sort terms using comparison function
    usort($terms, 'cmp');

    // get names from objects
    function my_function($z)
    {
        return $z->name;
    }

    // map names array using my_function()
    $term_names = array_map('my_function', $terms);

    // define separator
    $separator = ', ';

    // get string by imploding the array using the separator 
    $term_names = implode($separator, $term_names);

    echo $term_names; // OR return

}
2
Max Yudin