WordPress記事カテゴリ一覧をプルダウン式で選択できるようにする。

WordPress記事カテゴリ一覧をプルダウン式で選択できるようにする。

このブログの右サイドバーにあるようなやつです。

 

<select>にonchangeをつけています。

<select onchange="document.location.href=this.options[this.selectedIndex].value;">
<option value="" selected="selected">カテゴリーを選択</option> // この部分をphpで回しましょう。
<option value="URL">カテゴリー名</option>
</select>
少し長いですがコードを見ていきましょう。

<?php
$all_cats = get_terms(array(
	'taxonomy' => 'category',
	'hide_empty' => false,
	'orderby' => 'description',
	'pad_counts' => true,
));

foreach($all_cats as $cat)
{
  if ($cat->parent) continue; ?>
  <option value="<?php
  echo esc_html(get_category_link($cat->term_id)); ?>">
  <?php
  echo esc_html($cat->name . ' (' . $cat->count . ')'); ?></option>
  <?php
  $child_cat_num = count(get_term_children($cat->term_id, 'category'));
  if ($child_cat_num > 0)
  {
    $category_children_args = array(
      'parent' => $cat->term_id,
      'hide_empty' => false,
      'orderby' => 'description',
      'pad_counts' => true,
    );
    $category_children = get_categories($category_children_args);
    foreach($category_children as $child_val)
    { ?>
      <option value="<?php
      echo esc_html(get_category_link($child_val->cat_ID)); ?>">
      <?php
      echo esc_html('- ' . $child_val->name . ' (' . $child_val->count . ')'); ?></option>
      <?php
    }
  }
}
?>

2-7行目get_terms(array());

タクソノミーを取得する関数。array()に条件を指定しましょう。

  • ‘taxonomy’ => ‘category’, カテゴリー
  • ‘hide_empty’ => false, 空のカテゴリーを非表示にする。をオフに
  • ‘orderby’ => ‘description’, 並び替えをカテゴリーの説明に
  • ‘pad_counts’ => true, カテゴリーの子孫の記事数も含めるかどうか

他にもたくさんオプションがあるので詳しくはリファレンスを見てください。

関数リファレンス/get terms

9.$all_cats as $cat

$catには子孫カテゴリーは含まれていません。そこで子孫カテゴリがあるかどうかを調べてある場合にはもう一度ループを回しています。

17-18行目子孫カテゴリーがある場合をチェック

$child_cat_num = count(get_term_children($cat->term_id, ‘category’));
if ($child_cat_num > 0){}

 

20-26行目子孫カテゴリーを追う部分です。

21.‘parent’ => $cat->term_id,

parentオプションは指定されたカテゴリidを親に持つカテゴリに絞ります。

26.get_categories($category_children_args);

get_termsとgetcategoriesはほとんど同じです。

arrayに’taxonomy’ => ‘category’を指定すればget_termsで良いでしょう。

 

get_terms(array())を使えばカテゴリやタグを条件付きで取得できるので便利です。

カテゴリ一覧を記事作成したときだけ静的に作成させることでPHPの処理を減らす方法もあります。

https://hyperts.net/static-file-create-scheduled/

分からないことがあればコメントしてください。

 (´ ・ω・`) コメント 0件
_(__つ/ ̄ ̄ ̄/
  \/   /
     ̄ ̄ ̄
 (´・ω・`)
_( つ ミ  バタンッ
  \ ̄ ̄ ̄\ミ
     ̄ ̄ ̄ ̄

コメントを残す

メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。URLを含むコメントは承認待ちになります。