[WP]カテゴリーの順番をプラグインなしで並べ替える方法!funcitons.phpでカテゴリー表示をカスタムする。

2021-08-29

Wordpressカテゴリー順番変更-プラグインなし_eyecatch

Worpdressでプラグインを使わずにカテゴリーの順番を変更したり、未分類などの表示したくないカテゴリーを非表示にする方法をまとめました。

表示順の変更はプラグインを使用する方法が有名ですが、カテゴリーを操作するための「widget_categories_args」というフィルターフックをfuncitons.phpで使えばプラグインなしでも実装できます。

プラグイン数を1つ減らせるのでセキュリティ、高速化の面でもオススメ!

プラグインなしでカテゴリー表示を変更する

Wordpressにはカテゴリーの並び順を変更する機能がありません。
テーマによって変わりますが、標準仕様ではカテゴリーの名前順に出力されます。

Wordpressカテゴリー順番変更-プラグインなし_001

名前順に表示されるカテゴリー

「Category Order and Taxonomy Terms Order」や「Custom Taxonomy Order」というプラグインを使用すればドラッグ&ドロップでカテゴリーの順番を並べ替えることが出来ますが、これらのプラグインを使わずにfuncitons.phpで操作しようというのが今回の記事内容です。

プラグインを使わないメリットは何といってもセキュリティと高速化です。
ナビゲーションメニューを使う方法もありますが、今回はこれも使いません。

また、執筆時プラグインには未分類などの表示したくないカテゴリーを非表示にする機能がありませんが、この方法を使えばカテゴリーIDを指定するだけでそのカテゴリーを非表示にすることが出来ます。

widget_categories_argsフックでの並べ替え

コードの紹介前にこの記事で出来ることをまとめておきます。

あくまでもプログラムの並べ替え機能を使った方法なので、完全自由にカテゴリーの順番を変更することは出来ません。
多くの方の場合、何かの並び順にすると思うので問題はないと思いますが…

この方法では以下の項目順で並び替えることができます。
(それぞれ昇順、降順の指定ができます。)

カテゴリーの並び替えについて

  • name:カテゴリーの名前(アルファベット順)
  • count:カテゴリーの投稿数順
  • id:カテゴリーの作成順(ID順)
  • slug:スラッグ順
  • term_group:親タームのID順

日本のサイトでは名前順か投稿数順が好まれるように思います。
○○カテゴリーの下は○○カテゴリーでないと絶対ダメ!という人はプラグインを使ってください。

カテゴリーの順番変更以外に以下のこともできます。

その他出来ること

  • 指定IDのカテゴリーを非表示にする
  • 親カテゴリーと子カテゴリーを階層表示
  • カテゴリーの投稿数を表示する
  • 投稿数が0のカテゴリーを表示する
  • カテゴリーの表示順を制限する

これで全てではないですが、かなり細かくなりますので割愛します。
テーマに付属している機能もあると思いますが、結構触れます。

長くなりました。ベースとなるコードはコチラです。

function categories_order($cat_args) {
    //項目を指定:id,name,slug,count,term_group
    $cat_args['orderby'] = 'count';
    //昇順か降順か:ASC,DESC
    $cat_args['order'] = 'DESC';
    //指定IDのカテゴリーを非表示
    $cat_args['exclude'] = '1';
    //階層表示の有効化
    $cat_args['hierarchical'] = '1';
    //投稿数を表示
    $cat_args['show_count'] = '1';
    //投稿数0のカテゴリーを非表示
    $cat_args['hide_empty'] = '0';
    //表示するカテゴリーの数
    $cat_args['number'] = '5';
    return $cat_args;
}
add_filter('widget_categories_args', 'categories_order', 10);

コードの簡単なポイントは以下です。

コードのポイント

  • orderbyにはソートしたい項目、上記のcountやidなどを指定します。
  • orderには昇順ASCか降順DESCを指定します。
  • excludeにはカテゴリーIDを指定します。
  • その他のオプション値については1が有効、0が無効です。

ではやり方を詳しくご紹介していきます・w・

スポンサーリンク

カテゴリーを投稿数順に変更する

まずは一番需要がありそうなカテゴリーを投稿数順に変更する方法です。
下記のコードをfunctions.phpに追記すればOKです!

//カテゴリーを投稿数順に変更する
function categories_order($cat_args) {
    $cat_args['orderby'] = 'count';
    $cat_args['order'] = 'DESC';
    return $cat_args;
}
add_filter('widget_categories_args', 'categories_order', 10);

orderbyでcountを指定し、orderで降順のDESCを指定してます。
名前順の場合はorderbyでname、orderにASCを指定してある感じです

Wordpressカテゴリー順番変更-プラグインなし_002

投稿数順に変更される

これでカテゴリー内の投稿数の順番にカテゴリーが表示されます。
もちろん記事数によって順番はその都度入れ替わります。

カテゴリーの作成順に変更する

続いて標準仕様では名前順になっていますので、作成順にしてみましょう。
カテゴリーIDは作成した順番になっていますのでIDで並べ替えればOKです。

//カテゴリーを作成順に変更する
function categories_order($cat_args) {
    $cat_args['orderby'] = 'id';
    $cat_args['order'] = 'ASC';
    return $cat_args;
}
add_filter('widget_categories_args', 'categories_order', 10);

こんな感じでOK!作成順の場合は降順ではなく昇順です。

Wordpressカテゴリー順番変更-プラグインなし_003

カテゴリーの作成順(ID順)

未分類はWordpressのインストール時に自動作成されますので一番上にきます。

未分類を非表示にする

任意のカテゴリーをIDを指定して非表示にすることもできます。
これがプラグインでは出来ないんですよねぇ…

SEO的には未分類というカテゴリーは無い方が良く、noindex設定にしてあることが多いと思います。ところが先ほどの作成順にすると一番上に表示されてしまいます。
この未分類を非表示にしましょう。

Wordpressカテゴリー順番変更-プラグインなし_004

未分類はカテゴリーIDが1

カテゴリーIDは作成順に振られていきますので、未分類は1です。
未分類を除外するコードを追加したものが以下です。

//カテゴリー並べ替え
function categories_order($cat_args) {
    $cat_args['orderby'] = 'count';
    $cat_args['order'] = 'DESC';
    //非表示にしたいカテゴリーID。1,11,50と複数指定可
    $cat_args['exclude'] = '1';
    return $cat_args;
}
add_filter('widget_categories_args', 'categories_order', 10);

excludeに未分類のカテゴリーIDである1を指定すればOKです。
1,11,50のようにカンマで区切って複数のカテゴリーを非表示にすることもできます。

Wordpressカテゴリー順番変更-プラグインなし_005

未分類が表示されなくなった

これで未分類を非表示にできます。なんと便利なフックw

カテゴリーの階層表示について

ここで「widget_categories_args」を使う場合の補足です。
この方法で並び替えると親カテゴリーと子カテゴリーの表示がバラバラになります。

Wordpressカテゴリー順番変更-プラグインなし_006

親子に関係なく項目順に表示される

先ほどの動作結果ですが、実は「パソコン」が親カテゴリー、「Webブラウザー」が「パソコン」の子カテゴリーの設定で行っています。
投稿数順でのソートなので間違ってはいないのですが、親カテゴリーと子カテゴリーの上下が逆転するのは気になります。

そんな時はhierarchicalという項目を有効にすればOKです。

//カテゴリー並べ替え
function categories_order($cat_args) {
    $cat_args['orderby'] = 'count';
    $cat_args['order'] = 'DESC';
    $cat_args['exclude'] = '1';
    //カテゴリーの階層表示を有効化
    $cat_args['hierarchical'] = '1';
    return $cat_args;
}
add_filter('widget_categories_args', 'categories_order', 10);

1が有効、0が無効です。

Wordpressカテゴリー順番変更-プラグインなし_007

カテゴリーの階層表示が有効になる

これでカテゴリーの親子関係がとても分かりやすくなりました!
なお、親カテゴリーの投稿数は「親カテゴリー+子カテゴリーの投稿数」と合計表示になります。そんなに問題は無いですね。

投稿数が0のカテゴリーも表示する

ここから先はおまけです。多分あんまり使いません…
投稿数が0のカテゴリーも表示する方法ですが、表示する意味は無いと思います。
hide_emptyというキーを使います。

//カテゴリー並べ替え
function categories_order($cat_args) {
    $cat_args['orderby'] = 'count';
    $cat_args['order'] = 'DESC';
    $cat_args['exclude'] = '1';
    $cat_args['hierarchical'] = '1';
    //投稿のないカテゴリーを表示する
    $cat_args['hide_empty'] = '0';
    return $cat_args;
}
add_filter('widget_categories_args', 'categories_order', 10);

こちらも1が有効、0が無効です。

Wordpressカテゴリー順番変更-プラグインなし_008

投稿数が0のカテゴリーも表示される

全カテゴリーを表示すると言い換えても良いかもしれません。
テストサイトなどにはいいかもですが、本番環境では使わないかな?

カテゴリーの投稿数の表示

show_countを使うと投稿数の表示、非表示が設定できます。
投稿数0は見栄えが悪いので非表示にしたい場合は以下のようにします。

function categories_order($cat_args) {
    //カテゴリーの投稿数を表示しない
    $cat_args['show_count'] = '0';
    return $cat_args;
}
add_filter('widget_categories_args', 'categories_order', 10);

コードは中略してますので組み合わせて使ってください。

カテゴリーの表示数を制限する

これも使わないと思います。
並べ替えたカテゴリーのうち上位○○個だけを表示したい場合。
numberを使います。

function categories_order($cat_args) {
    //カテゴリーの表示数を3つまでにする
    $cat_args['number'] = '3';
    return $cat_args;
}
add_filter('widget_categories_args', 'categories_order', 10);

コードは中略してますので組み合わせて使ってください。

Wordpressカテゴリー順番変更-プラグインなし_009

3つしかカテゴリーが表示されなくなる

使いどころは多分ないですw

widget_categories_argsが効かない場合

この手のやり方は思った動作にならないことが多々あります。

今回の内容ですと主な原因は以下です。

コードが効かない時の確認事項

  • カテゴリー関係のプラグインとの干渉。
  • テーマ専用のファイルに別途コードがある。
  • ソースコードの不備。

プラグインは停止する

「Category Order and Taxonomy Terms Order」を有効化しながら上記のコードを試したところ、変な表示になることがありました。
カテゴリー関係のプラグインは干渉する可能性があるため、無効化して下さい。
(有効化しながら今回の方法を使う必要はないはずですが)

なお、プラグインを使いながら未分類を非表示にすることはできました。

使えないテーマもある

特にテーマ専用のカテゴリー表示ウィジェットを使用している場合、上記のコードが効かない可能性があります。
テーマで読み込んでいる該当の「○○.php」内で'orderby'や'order'を書いている場所を探して変更するしかないです。

ソースコードの不備

当サイトのコードは一応動作確認しているので大丈夫かと思います。
が、コードの組み合わせによっては他の値が有効(引数1)や無効(引数0)になっていないと動作しないものもあります。



まとめ

Wordpressでプラグインを使わずにカテゴリー表示をカスタムする方法でした。
検索してもプラグインを使う方法ばかりで、プラグインなしで実現する方法が詳しく書かれていませんでしたので記事にしてみました。

ちなみに高速化を重視している当サイトでもこのコードを使用してカテゴリーを投稿数順で表示しています。
カテゴリーを順番変更するプラグインが重たいとは聞いたことが無いですが、減らせるならば1つでも減らしておきたいものです。

テーマによっては使えないこともありますが、試すのは数分でできます。
使えるようならプラグインなしで色々できてオススメの方法です。
良ければWordpress仲間にシェアしてあげてください←

-WordPress
-,

site-logo
ありがとうございました!
良かったらシェアしてネ・w・
当サイトはピンバックを受け付けます。
  • この記事を書いた人
ザキ

ザキ

X:@sologaku

プログラミングに興味があり情報系の大学を卒業。

新卒で社会人になるも数年で退職し今はフリーランスとして生きています。

少しでも誰かの役に立てれば...と思い、当サイトでIT関係のハウツーを発信しています。


ソロ学運営者:ザキの自己紹介

© 2020 sologaku