【Wordperss】カテゴリー一覧を好きな順番で表示させたい
概要
よくWordpressでカテゴリー一覧を表示させる時に一覧ページ上部にカテゴリーのナビゲーションを設定することある。
ALL|グルメ|自然|キャリア
といった感じ。ただ日本語やアルファベットが混じってると表示順番が思ってたのと違ったり指摘されたりすることもあるので、好きなように並び替えられたらいいなという。
調べたらいくつか方法あるようだが、なるべくプラグインとか使いたくないので、使わない方法で。
一般的な出力方法
だいたいカテゴリー一覧(category.php)で出力する場合は、get_categories
を使って下記のように出力するかと思う。
<?php
$categories_list =get_categories();
?>
<?php foreach( $categories_list as $category ) : ?>
<li><?php echo $category->name; ?></li>
<?php endforeach; ?>
ただこれだと好きなように出力されなかったりする。
カテゴリーの説明を使う。
そこで、まずカテゴリーを新規作成(作成済みなら編集)で「説明」の部分を使う。
この「説明」の部分に左から表示したい順に小さい数字を入れていく。
ALL(親カテゴリー) → 10という数字を記入
-グルメ → 20という数字を記入
-自然 → 30という数字を記入
-キャリア → 40という数字を記入
上記の例だと左から ALL/グルメ/自然/キャリア と表示させたい。
数値を入れたら、更新しておく。
usortメソッドを使用して並び替える。
カテゴリーの説明はphpでdescription
として取得できる。
そしてusortはユーザー定義の比較関数を使用して、配列を値でソートするというメソッドなので、こちらを利用する。
ようはカテゴリーの説明に記入した数値を比較してget_categories
で取得した配列を並び替えるという事である。
<?php
$categories_list =get_categories();
usort($categories_list, function($a, $b) {
return $a->description - $b->description;
});
?>
上記のようにusort
で第1引数に「カテゴリーの配列」、第2引数にコールバック関数を指定してあげて、比較して並び替えてあげれば良い。
あとはforeach
で出力してあげれば好きな順番で出力されてるはず。
まとめ
他にもカスタムフィールを使用して、カテゴリーに並び替え用の数字を設定する方法もあるようで、下記サイトに載っている。 有名な方法らしい。
Discussion