私は現在、WordPressのwp_list_categories
関数を使用して、指定された分類から自分の用語を取得しています。適切なクラス名などを備えた(階層的な)HTMLリストを生成できるという点で、この機能が好きです。
Simple Custom Post Order pluginを使用して自分の用語を並べ替えました。これは、すべての用語を通常の方法で一覧表示した場合(つまりget_termsを使用した場合)は正常に機能します。
ただし、wp_list_categories
を使用して自分の用語を一覧表示しようとすると、 "term_order"(または "menu_order")を使用しているときに"orderby"引数が受け入れられません。
誰かが私を正しい方向に向けることができますか?
私は以下の私のコードを提供しました:
$categories = wp_list_categories([
'taxonomy' => 'news_category',
'title_li' => '',
'orderby' => 'menu_order',
'order' => 'ASC',
'echo' => 0,
'current_category' => $current_term_id,
'depth' => 0
]);
編集:私はmenu_order
を使っていたはずだったが、私はterm_order
を使った。それでも、いつかこれが誰かに役立つことを願っています:)
wp_list_categories()
関数はget_categories()
関数を呼び出します。これはget_terms()
関数のラッパーで、WP_Term_Query
クラスのインスタンスを作成します。 term order による順序付けをサポートしているようには見えません。
プラグインがterm_order
テーブルのwp_terms
列を使用する場合は、get_terms_orderby
フィルタを介して、その順序付けのサポートを追加してみることができます。
add_filter( 'get_terms_orderby', function( $orderby, $qv, $taxonomy )
{
// Only target the category taxonomy
if( 'category' !== $taxonomy )
return $orderby;
// Support orderby term_order
if( isset( $qv['orderby'] ) && 'term_order' === $qv['orderby'] )
$orderby = 't.term_order';
return $orderby;
}, 10, 3 );
ここでは、これをcategory
分類法でのみサポートしています。
もう1つの方法は、フィルタを追加してwp_list_categories()
呼び出しの直後に削除することです。