[WordPress]プラグインを使わずにカスタムタクソノミーの順番を変更する

2018.12.13

 

 

ども、六崎です。

最近ファイアーエムブレムヒーローズ(feh)のガチャで当たりを引きまくってます!
先日のミルラちゃん(ハロウィンver.)も最終日に当たり(昼休み、誰もいないミーティングルームで小躍りしてましたw)、
水着ターナ、飛行オリヴィエ、ロキ、伝承エイリーク、そしてスルト!!!
おいおいおい、どうした下期の私!というくらい、狙ったのが当たってます(ノ´∀`)ノ

 

ちょっと前に始まった飛空城では、スルトがメッチャ防衛してくれてます。
ルフレ(ギムレーver.)と組ませ、地形をプレイヤーにとっては最悪な状態にして…
防衛状況見て「防衛成功」と表示されているたびにニヤっとしています(性格悪いわー

 

近々(これを書いてるのは11月末)、伝承英雄召喚イベントがあるとのアナウンスがあったので、
次も当てたいと思います!(オーブメッチャ貯まってきてます
烈火好きとしてはリンとヘクトルが伝承英雄になってるので、エリウッドもなってくれると嬉しいなー。

 

 

さて、本題!
WordPressって、プラグインを使えばPHPに自信がなくてもそれなりのものができますよね。
それがメッチャ便利な所なのですが、気付いたらプラグインがいっぱいになっちゃった!ってなるのはちょっと考えもの…。

なぜなら、プラグイン同士のバッティングでサイトが動かなくなっちゃったり、WPをバージョンアップさせてプラグインが対応してなかったら代替策を考えなきゃいけないし…。

挙句、バージョンアップ後やテンプレート更新後、検証作業を行って動作しない所があったら、プラグインがいっぱいあったらなにが原因か突き止めるのにメッチャ時間がかかる。
できるだけ、そういう不安やイライラは避けたいものです。

 

私も最初こそプラグイン頼りだったのですが、
今はできるところから少しずつ脱プラグインしてfunctions.phpに書いたりしています。

 

と、いうことで今回はカスタムタクソノミーの順番を希望のものに変更する方法です。
カスタムタクソノミーはカスタム投稿タイプのカテゴリですね。
プラグインでやるならばCategory Order and Taxonomy Terms Orderが一番有名かと思います。
ドラッグアンドドロップで感覚的に操作できますからね!
でも今回はプラグインを使わないやり方を説明するので、戻ってきてねー(笑)

 

まず、カスタムタクソノミーのデフォルトの順番は数字→アルファベット→ひらがな→カタカナ→漢字の順番に並んでいます。
なので、上記の順番と異なるオリジナルな順番にしたい場合はちょこっといじってあげないといけません。

 

今回は
・functions.php
・archives-[taxonomy name].php
 (taxonomy-[タクソノミーの名前].php, taxonomy.phpとかとか…カスタムタクソノミーの一覧を表示したいテンプレート)
・管理画面
をいじります。

 

「げ、functions.php !?!?」と思って戻ろうとした方、ちょいちょい(笑)
そんなに難しくないので、やりたい形かだけまず確認してみてください。

 

フィールドを増やして、入力する部分を作るやり方もあるのですが
・極力プラグインを使わない
・使わないところの有効利用
ということで、カテゴリ作成画面にある「説明」を利用して、順番を変えたいと思います。

 

functions.php

1
2
3
4
5
6
7
8
/カスタムタクソノミーを説明にある順番で並べる
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 );

 

まず、functions.phpから。
get_terms_orderbyにフィルターフックして、taxonomy_orderby_descriptionを登録しています。
ここで、description(管理画面でいう「説明」)を基準に順番を並べ替えてねーってやってます。

 

次に、archives-[taxonomy name].phpです。

 

archives-[taxonomy name].php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<ul>
<?php
 $terms = get_terms([taxonomy slag name]',
  array(
   //「説明」に記載されている順番にソート
   '
parent' => 0,
   '
orderby' => 'description'
          )
        );
        foreach ( $terms as $term ) {
        echo '
<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>';
        }
      ?>
</ul>

 

これは、[taxonomy slag name]に登録されているカスタムタクソノミーをリンク付きでリスト表示してね!ってやっています。
もちろんソートは「description」ということで説明に書かれている順番を見ています。

 

管理画面

 

 

 

最後の管理画面のカスタムタクソノミーを設定する画面(投稿でいうカテゴリー)で、説明部分に番号を振り分けてあげれば、サイト上で表示されているカスタムタクソノミーが希望通りの順番になっているのです!
増えてきて、新規を途中に差し込みたい…なんて要望も考えると絶対に一番最後になるもの(画像でいう「Other」とか)は「100」と設定しておけば、一つ手間は減るかと思います。

 

あ、ちなみにidとかslugとかデフォルトでいいよ、って方はfunctions.phpは設定せずに、
archives-[taxonomy name].phpのorderbyに入力してあげるだけでOKです。
[参考] WordPress Codex – 関数リファレンス/get terms

 

ねっ!簡単でしょ!
基本コピペでできるので、同じやり方を探していた方はぜひ挑戦してください。

 

ではまたっ!


Top