私は自分の用語を数字で並べようとしています。しかし問題は、すべての用語が数値ではないことです。だから私はそれらのいくつかは次元であり、いくつかは他のものである次の用語があります(下の画像を確認)。ご覧のとおり、私の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>';
}
}
?>
オブジェクト$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;
});