it-swarm.com.de

get_terms orderby numeric

Ich versuche, meine Begriffe numerisch zu ordnen. Aber das Problem ist, dass nog jeder Begriff numerisch ist. Ich habe also die folgenden Begriffe (siehe Bild unten), bei denen es sich zum Teil um Abmessungen und zum Teil um andere handelt. Wie Sie sehen können, ordnet meine Funktion get_terms() sie nach Namen, aber wenn sie numerisch sind, wird nur das erste Zeichen angezeigt. 1400 mm sind also weniger als 500 mm.

Ich weiß nicht, wo ich anfangen soll. Sollte ich versuchen, das Ergebnis von get_terms() zu ändern oder mich in die Funktion get_terms_orderby () einhängen. Aber ich habe keine Ahnung, wie das geht.

Mein Code zum Anzeigen der Begriffe:

<?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>';
    }
}
?>

enter image description here

1
Robbert

Sie können usort verwenden, um das Objekt $children zu sortieren.

Die Funktion, die sortiert werden soll, nachdem Sie das Objekt $children erhalten haben, kann folgendermaßen aussehen:

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;
});
1
Tung Du