J'ai des catégories dont les noms sont compris entre 1 et 25. Mais le système de commande WordPress ne fonctionne pas correctement. Il leur ordonne 1,10,11,12,13 ... 2,21,22,23,24,25. Je ne veux pas ajouter 0 à 1-9 chiffres. Comment puis-je résoudre ce problème?
Ceci est mon code:
<li class="categoriesx <?php echo print_category_slug( get_the_category( $post->ID) ); ?>"
data-category="<?php echo print_category_slug( get_the_category( $post->ID) ); ?>">
D'après les recherches que j'ai effectuées à ce sujet, l'utilisation de métadonnées sur les termes constitue une meilleure approche globale pour la commande de termes.
Cependant, j'ai pu arriver à cet extrait qui trie les termes par leur nom, numériquement:
add_filter( 'terms_clauses', 'wpse247680_terms_clauses', 10, 3 );
function wpse247680_terms_clauses( $pieces, $taxonomies, $args ) {
// Bail if we are not looking at the right taxonomy, 'category' in this case.
if ( ! in_array( 'category', $taxonomies ) ) {
return $pieces;
}
// Casts the term name to an integer
// Idea derrived from similar idea using posts here: https://www.fldtrace.com/custom-post-types-numeric-title-order
$pieces['orderby'] = 'ORDER BY (t.name+0) ';
return $pieces;
}
Voici une capture d'écran montrant cela en action dans la zone d'administration. Pour tester, j'ai créé une nouvelle taxonomie nommée 'numeral', et créé les termes dans un ordre arbitraire. Lorsque le code affiché ci-dessus est utilisé, les termes seront classés par ordre numérique.
WordPress classera vos catégories par ordre alphabétique, ce qui conduit au résultat obtenu. Vous voulez les commander numériquement. PHP peut le faire pour vous. Disons que vous avez un tableau de catégories, ordonné au hasard, comme ceci:
$cats = array ('3', '22', '17', ... '7');
Vous pouvez ensuite utiliser le tri PHP tout en forçant un ordre de tri numérique:
sort ($cats, SORT_NUMERIC);
Cela devrait vous donner
$cats = array ('1', '2', '3', ... '25');