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.
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;
}
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
}