J'ai une taxonomie personnalisée contenant des termes tels que "volume 1", "volume 2", "numéro 1", "numéro 2", "numéro 10" et get_terms orderby name renvoie la liste sous la forme: numéro 1, numéro 10, numéro 2 bien que j'ai besoin que ce soit le numéro 1, numéro 2, numéro 10
J'ai essayé de rechercher wp.stackexchange et d'utiliser mon google-fu en vain. Toute aide serait grandement appréciée.
Je sais que ce message est très ancien mais qu'il répond toujours à d'autres qui arrivent ici.
Voici un filtre très simple pour trier les termes sous forme de nombres. Il vous suffit de définir la variable $taxonomy_to_sort
avec taxonomy slug
et de la placer dans functions.php
de votre thème.
add_filter( 'get_terms_orderby', 'terms_order_as_number', 10, 3);
function terms_order_as_number($order_by, $args, $taxonomies){
$taxonomy_to_sort = "numbers";
if(in_array($taxonomy_to_sort, $taxonomies)){
$order_by .= " * 1";
}
return $order_by;
}
Il y a beaucoup de messages similaires sur le forum, si vous regardez autour de vous.
Vous n'avez pas de chiffres . Par conséquent, vous ne pouvez pas trier numériquement. Vous devez trier par ordre alphabétique et cela vous donnera le motif que vous voyez. Honnêtement, je ne suis même pas sûr si get_terms
prend en charge un tri numérique (en un coup d'œil, je dirais que non), car je doute que de nombreux termes soient entièrement composé de chiffres.
Vous avez plusieurs options.
substr
le nom du terme et trier sur cela. Ce serait poilu et probablement pas très efficace.substr
le nom, le trier et le reconstituer. Toute pagination serait problématique avec cette approche.Tout d'abord, vous demandez de trier une partie qui est dans une chaîne. Ceci est pas de fonctionnalité native dans aucun langage de programmation .
Deuxièmement, votre problème actuel n’est pas de "trier par numéro", mais de la façon dont vous avez construit ces nombres. Si vous aviez connu ce problème devant vous (et l'aviez pris en compte), vous auriez pu écrire un filtre qui compense ces zéros devant vos chiffres.
Cela ne résout pas vraiment le problème , mais comme nous (et peut-être vous aussi) ne savons pas combien de "problèmes" vous pourriez rencontrer (10, 1k, 100k ?), nous ajoutons simplement le tri lors de son affichage. Voici une balise de modèle à utiliser:
function wpse80063_numsorted_issues()
{
$terms = get_terms( 'issues', array( /* of possible args */ );
$digits = strlen( count( $terms ) );
$sorted_terms = array();
foreach ( $terms as $term )
{
preg_match( "/\d+/", $term, $nr );
$nr = sprintf( "%0{digits}d", $nr );
// If the above line doesn't work, take this one:
// $nr = str_pad( $nr, $digits, "0", STR_PAD_LEFT );
$sorted_terms[ $nr ] = $term;
}
! empty( $sorted_terms ) AND sort( $sorted_terms );
return $sorted_terms;
}