web-dev-qa-db-ja.com

wp_list_categories:期間順に並べ替えますか?

私は現在、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を使った。それでも、いつかこれが誰かに役立つことを願っています:)

4
digifrog

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()呼び出しの直後に削除することです。

3
birgire