制作ブログ Web制作アプリケーションWordPressget_terms で orderby が効かない場合

get_terms で orderby が効かない場合

ターム一覧を取得するには、get_termsを使う。
ターム一覧を投稿記事の多い順に取得しようと「orderby => ‘count’」として、get_termsの引数にセットしても効かない場合がある。
これは、管理画面上で何かしらの順序並び替えるプラグインを有効にしている場合に発生してしまう。とはいえ、そのプラグインは無効にしないで使い続けたい。

そんなときは、並び替え用に一旦配列を用意する、という二度手間をすることで実現できるので、備忘録。

タクソノミーの名前は「sample_taxonomy」、タームの名前とスラッグを記事の多い順に取得するサンプル

補足で、記事投稿のないタームは取得しない(hide_empty)。

$term_array = [];
$args = array(
  'hide_empty' => 0,
);
$terms = get_terms('sample_taxonomy', $args);

foreach ($terms as $term) {
  array_push($term_array, array(
    'name' => $term -> name,
    'slug' => $term -> slug,
    'count' => $term -> count,
  ));
}

$sort_key = array_column($term_array, 'count');
array_multisort($sort_key, SORT_DESC, $term_array);

foreach ($term_array as $term) {
  // 名前 $term['name'];
  // スラッグ $term['slug'];
  // 記事数 $term['count'];
}

無駄な処理を増やすのでオススメはできないが、今のところほかの方法が思いつかない。とりあえず応急対応ということで。

複数のタクソノミーを対象にしたい場合や、検索条件をセットしたい場合は、WordPress Codexで詳しく紹介されているので、参考サイトにリンクを貼っておく。