📘

【Wordperss】カテゴリー一覧を好きな順番で表示させたい

2022/06/26に公開

概要

よく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で出力してあげれば好きな順番で出力されてるはず。

まとめ

他にもカスタムフィールを使用して、カテゴリーに並び替え用の数字を設定する方法もあるようで、下記サイトに載っている。 有名な方法らしい。

https://www.nishi2002.com/14929.html

Discussion