J'essaie de commander mes termes numériques. Mais le problème est que nog chaque terme est numérique. J'ai donc les termes suivants (vérifier l'image ci-dessous) dont certains sont des dimensions et d'autres sont. Comme vous pouvez le constater, ma fonction get_terms()
les ordonne par nom, mais si elles sont numériques, elle ne regarde que le premier caractère. Donc 1400mm est inférieur à 500mm.
Je ne sais pas par où commencer. Devrais-je essayer de modifier le résultat de get_terms()
ou de l’accrocher à la fonction get_terms_orderby () . Mais je ne sais pas comment faire ça.
Mon code pour afficher les termes:
<?php
$taxonomy = 'product-filter';
$parents = get_terms( $taxonomy, array( 'hide_empty' => false, 'parent' => 0, 'orderby' => 'id' ) );
if( ! empty( $parents ) ) {
foreach( $parents as $parent ) {
echo '<ul>';
echo '<h2>' . $parent->name . '</h2>';
$children = get_terms( $taxonomy, array( 'hide_empty' => false, 'child_of' => $parent->term_id ) );
foreach( $children as $child ) {
echo '<li><label><input type="checkbox">' . $child->name . ' (' . $child->count . ')</label></li>';
}
echo '</ul>';
}
}
?>
Vous pouvez utiliser usort pour trier l'objet $children
.
La fonction à trier après avoir obtenu l'objet $children
peut ressembler à ceci:
usort( $children, function($a, $b) {
$ai = filter_var($a->name, FILTER_SANITIZE_NUMBER_INT);
$bi = filter_var($b->name, FILTER_SANITIZE_NUMBER_INT);
if ($ai == $bi) {
return 0;
}
return ($ai < $bi) ? -1 : 1;
});