サポート » 使い方全般 » 管理画面で、カスタム分類の並び順を変えたい

  • 解決済 dominoDomino

    (@dominodomino)


    都道府県を表すカスタム分類を下記のように追加しました。

    register_taxonomy('area', 'post', array(
    	'labels' => array(
    		'name' => 'エリア'
    	),
    	'hierarchical' => true
    ));

    各都道府県を追加したのですが、並び順がバラバラになっております。
    希望としては
    北海道、青森、岩手、宮城、、、、
    といった形で北から順に並べたいです。

    そこでプラグイン(Advanced Custom Fields)を使って”area_code”というフィールドを追加し、
    各都道府県に
    01、02、03、04、、、、
    と番号を振りました。

    functions.phpにget_terms_orderbyで並び順を変えようとしているのですが、
    書き方で詰まっている状態です。
    ググってみても、下記のような説明欄を利用した並び替えがヒットするだけでこちらの希望とは少しちがうものになっております。

    function taxonomy_orderby_description( $orderby, $args ) {
      if ( $args['orderby'] == 'description' ) {
        $orderby = 'tt.description';
      }
      return $orderby;
    }
    add_filter( 'get_terms_orderby', 'taxonomy_orderby_description', 10, 1 );

    お手数ですがご教示いただければ幸いです。
    また、上記のtt.descriptionの「tt.」は何を表しているかもご教示いただきたいです。
    よろしくお願いいたします。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • DRILL LANCER

    (@rickaddison7634)

    プラグイン Custom Taxonomy Order を使えばカスタム分類でも ドラッグ & ドロップ で自由に並び替えることができ、それを反映させることができると思います。

    dominoDomino

    (@dominodomino)

    DRILL LANCER 様
    お返事ありがとうございます。
    また言葉足らずで申し訳ありません。

    できればプラグインなどを使わずに実装したいと考えております。
    よろしくお願いいたします。

    DRILL LANCER

    (@rickaddison7634)

    get_terms_orderby は parse_orderbyに対するフィルターフックです。

    tt は parse_orderby 内で使われているので parse_orderby が含まれるクラス全体のコードが理解できれば自ずと分かると思います。

    • この返信は8ヶ月前にDRILL LANCERが編集しました。
    DRILL LANCER

    (@rickaddison7634)

    カスタムフィールド area_code の取得方法は ACF | Resources, Documentation, API, How to & Tutorial Articles の情報が参考になると思います。

    • この返信は8ヶ月前にDRILL LANCERが編集しました。
    munyagu

    (@munyagu)

    こんにちは

    タームの一覧は get_terms で取得しているんでしょうか?

    でしたら、パラメータを以下のようにしたら area_code に基づいた順序に変更できると思います。

    
    $args = [
    	'orderby' => 'meta_value',
    	'meta_key' => 'area_code',
    ];
    $terms = get_terms('area', $args);
    
    munyagu

    (@munyagu)

    あ、管理画面での並びですね
    失礼しました

    dominoDomino

    (@dominodomino)

    DRILL LANCER 様
    回答ありがとうございます。

    tt は parse_orderby 内で使われているので parse_orderby が含まれるクラス全体のコードが理解できれば自ずと分かると思います。

    parse_orderbyを記述しているclass-wp-network-query.phpを確認し、
    なんとなくではありますがt.やtt.の意味が分かりました。

    質問内容とは逸れた件にも関わらずご教示いただきありがとうございます。

    dominoDomino

    (@dominodomino)

    munyagu 様
    そうなんです。
    テンプレートで表示するのは検索すると出てきたのですが、管理画面に関することが分からずずっと頭を抱えてました。

    dominoDomino

    (@dominodomino)

    ご報告させていただきます。

    「管理画面 タグ 並び順」などで検索すると
    get_terms_orderbyを使用した方法が出てきますが、
    こちらで教えていただいたparse_orderbyを確認してみると、get_terms_orderbyではmeta_keyを基準に並び替えが出来ないのではと考えました。
    そこで検索の仕方を変えながら探してみたところ
    「get_terms_args」と「get_terms_defaults」というフィルターを見つけました。
    参考サイト

    get_terms_argsではAdvanced Custom Fieldsで追加したtermでは並び替えできなかったので
    get_terms_defaultsを使ったところ、希望通りに並び替えることが出来ました。
    以下がコードになります。

    function area_taxonomy_order( $defaults, $taxonomies ) {
    	if($taxonomies[0] == 'area'){
    		$defaults['orderby'] = 'meta_value';
    		$defaults['meta_key'] = 'area_code';
    	}
    	return $defaults;
    }
    add_filter( 'get_terms_defaults', 'area_taxonomy_order', 10, 2 );

    回答いただいたお二方には感謝しております。
    ありがとうございました。

    こちらのコメントを持って解決済みとさせていただきます。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「管理画面で、カスタム分類の並び順を変えたい」には新たに返信することはできません。