web-dev-qa-db-ja.com

get_terms orderby数値

私は自分の用語を数字で並べようとしています。しかし問題は、すべての用語が数値ではないことです。だから私はそれらのいくつかは次元であり、いくつかは他のものである次の用語があります(下の画像を確認)。ご覧のとおり、私のget_terms()関数は名前順に並べていますが、数値の場合は最初の文字だけを調べます。つまり1400mmは500mm以下です。

どこから始めればいいのかわかりません。 get_terms()の結果を修正するか、 get_terms_orderby() 関数にフックする必要があります。しかし、私はこれを行う方法がわかりません。

用語を表示するための私のコード:

<?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

オブジェクト$childrenをソートするには、 usort を使用できます。

$childrenオブジェクトを取得した後にソートする関数は次のようになります。

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