みなさん、WordPressのカテゴリ、並べ替えてますか?
……どんなフリだよって。
WordPressのカテゴリリストって、標準ではカテゴリ名順になっちゃうんだよね。
つまり、あいうえお(もしくはABC)順になるわけだ。
リストを自作すると、カテゴリID順とか別の並び方にできるけど、「自由に並べ替える」機能はない。
自由に並べ替えられるプラグインはあるけど、サイドバーウィジェット専用だったり。
もしくは「プラグインはなるべく使わねぇ!!」という主義のあなた。
プラグインもテーマ関数(functions.php)も使わない、画期的な方法をご紹介。
まずはカテゴリリストを自作してみる
<ul>
<?php $cat_all = get_terms('category', 'hide_empty=0&orderby=name&pad_counts=1');
foreach ( $cat_all as $value ) { ?>
<li><a href="<?php echo get_category_link($value->term_id); ?>"><?php echo $value->name; ?></a> (<?php echo $value->count; ?>)</li>
<?php } ?>
</ul>
ソースは左右にスクロールして全部読めるよ。緑字はPHP部分。
こうやると、カテゴリの一覧を取得して、投稿数カウント付きでカテゴリ名順に表示する。
で、カテゴリ名順ってのはカテゴリ名の文字コード順なわけだ。
赤字部分を“name”から変更することで、ソートを投稿数順(count)、カテゴリID順(id)、スラッグ順(slug)などのフィールドに変えることができる。
get_terms()
関数の詳しい使い方は、次のリンク先を参照。
→関数リファレンス/get terms - WordPress Codex 日本語版
しかし、自由に並び替えるのは……
最終手段としてはPHPなど使わずに、HTMLで全部手書きすればいいのだが……
カテゴリの「説明」を使う
WordPressの管理画面の「投稿」→「カテゴリー」をみると、カテゴリには他のフィールドがあるじゃないか!
それはカテゴリの「説明」だ。
テーマによってはこのフィールドを使用するようだが、活用していない人も多いのではないだろうか。
ということで、「説明」フィールドに通し番号を付けて、これで並び替えればいいじゃないか!
上のリンク先には「説明」順でのソートについては書いてないんだけど、実は可能だ。
このブログでは、4桁の番号をつけてカテゴリを管理している。
上2桁が親カテゴリの番号、下2桁が子カテゴリの番号だ。
たとえば、「WEB」カテゴリは「0300」で、その子カテゴリの「れーとーびーむの作り方」カテゴリは「0301」という感じだ。
こうすれば、「説明」順にソートすることで、カテゴリを自由に並び替えることができる。
PHPの例
<ul>
<?php $cat_all = get_terms('category', 'hide_empty=0&orderby=description&pad_counts=1');
foreach ( $cat_all as $value ) { ?>
<li class="side-category<?php if ($value->parent) echo ' child'; ?>"><a href="<?php echo get_category_link($value->term_id); ?>"><?php echo $value->name; ?></a> (<?php echo $value->count; ?>)</li>
<?php } ?>
</ul>
赤字部分のように、 orderby=description
とすることで、ソートは「説明」順になる。
また、先ほどの例とは違い、橙字部分の記述を追加することで、「子カテゴリ」の<li>タグに child
というクラスを付けることができる。
これにより、CSSを弄ることで子カテゴリを「字下げ」して表示することもできる。
終わりに
今回は、WordPressでプラグインを使わずにカテゴリを自由に並び替える方法を紹介した。
プラグインってのはサイトの高速化のためにはあまり使いたくないのが本音だよね。
このブログでも、自力でなんとかなるものは可能な限りなんとかしようという方針でやっている。
WordPressは利用者が多く、またレンタルブログと違ってカスタマイズが前提のため、知識や経験が蓄積されていて、だいたいのことは検索すれば実現する方法が見つかるのだ。
でも今回の方法は、いろいろ検索しても見つからなかったので、自力でやってみたらうまくいったという感じだ。
WordPressの先輩方にはいつもお世話になっているので、俺もこうやって知識を共有することでその恩に報いたい。
ということで、これからもいろいろ発信していくので、お楽しみに? よろしく?
両方かな!
お世話になります。
WPのカテゴリ順番を変更で検索していたら、こちらにたどり着きました。
WP初心者なのですが、宜しければご教授ください。
「PHPの例」
に書いてあるulの記述はどこに記述すれば宜しいのでしょうか?
また、これを各当の場所に記述して「説明」に数字的な順番を付ければ、その順にカテゴリが配列されるということですか?
初心者的質問ですみません。
コメントありがとう。
「PHPの例」は全部まとめてテーマの
.php
ファイルのどれか、表示したい場所に書くんだぜ。テーマにもよるから一概には言えないけど、たとえばサイドバーだったら
sidebar.php
の中。PHPは
<?php
から?>
までの部分だけど、.php
ファイルにはHTMLとPHPを例の通り一緒に書くから、それらを区別するためにPHP部分は<?php
と?>
の間に入れなければならない。逆に、HTML部分はこれの中に入れないように注意。
二つ目の質問は、その通り。
管理者ページの「投稿」→「カテゴリー」のページにある“説明”という欄に通し番号を付ければOK。
カテゴリが多い場合も、桁数は揃えたほうがいいと思う!
ただ、本文にも書いてあるけど、テーマによってはこれを(純然たる目的で)使う箇所があるらしいから、そういう場合は別の方法を考えることになるかな。
本文ではあんまり丁寧に説明してないから、わからない部分があったら質問してくれるとうれしいっす。