グローバルナビメニューのカテゴリーに投稿数を表示する方法

Cocoonカスタマイズ
この記事は約5分で読めます。
記事内に広告が含まれています。

はじめに

グローバルナビメニューのカテゴリーに投稿数を表示する方法について、以下を整理します。

完成イメージ

実装手順

以下のコードをfunctions.phpに追加します。

add_filter('the_title', function($title, $post_ID) {
  // ナビゲーションメニューの場合
  if (get_post_type($post_ID) == 'nav_menu_item') {

    // メニューアイテムがカテゴリーの場合
    if (get_post_meta($post_ID, '_menu_item_object', true) == 'category') {
      // カテゴリーIDを取得
      $category = get_category(get_post_meta($post_ID, '_menu_item_object_id', true));

      // カテゴリーの投稿数が0以上の場合
      if ($category->count >= 0) {
        // タイトルにカテゴリーの投稿数を追加
        $title .= sprintf(' (%d)', $category->count);
      }
    }
  }
  return $title;
}, 10, 2);

補足

メニューも投稿の一部として扱われ、DBのwp_postmetaの拡張で情報が管理されます。
表1にメニューの情報を示します。

wp_postmeta
キー内容
_menu_item_type

  • post_type=投稿、固定ページ

  • custom=カスタムリンク

  • taxonomy=カテゴリー、タグ

_menu_item_menu_item_parent親メニュー=1
_menu_item_object_idオブジェクトID
_menu_item_object

  • post=投稿

  • page=固定ページ

  • category=カテゴリー

  • post_tag=タグ

  • custom=カスタムリンク

_menu_item_target1=_blank
_menu_item_classesCSS class
_menu_item_xfn
_menu_item_urlカスタムリンクのURL
array(8) {
  ["_menu_item_type"]=>array(1) {
    [0]=>string(9) "post_type"
  }
  ["_menu_item_menu_item_parent"]=>array(1) {
    [0]=>string(1) "0"
  }
  ["_menu_item_object_id"]=>array(1) {
    [0]=>string(4) "7949"
  }
  ["_menu_item_object"]=>array(1) {
    [0]=>string(4) "page"
  }
  ["_menu_item_target"]=>array(1) {
    [0]=>string(6) "_blank"
  }
  ["_menu_item_classes"]=>array(1) {
    [0]=>string(22) "a:1:{i:0;s:5:"class";}"
  }
  ["_menu_item_xfn"]=>array(1) {
    [0]=> string(0) ""
  }
  ["_menu_item_url"]=>array(1) {
    [0]=>string(0) ""
  }
}

参考:ボックスメニューのカテゴリーに投稿数を表示

以下を使用すれば、ボックスメニューにも投稿数を表示できます。
メニュー位置の判定を削除すると、メニュー設定全体に投稿数が反映されます。

  • ヘッダーメニュー
  • フッターメニュー
  • おすすめカード
  • ナビカード
  • ナビゲーションメニュー
add_filter('wp_get_nav_menu_items', function($items, $menu, $args) {
  // 該当のメニューの場合
  if ($menu->name == 'ボックスメニュー名') {
    foreach ($items as $item) {

      // メニューアイテム名がカテゴリーの場合
      if ($item->object == 'category') {
        // カテゴリー情報を取得
        $category = get_category(get_post_meta($item->ID, '_menu_item_object_id', true));
 
        // カテゴリーの投稿数が0以上の場合
        if (isset($category) && $category->count >= 0) {
          // メニューアイテムのタイトルにカテゴリーの投稿数を追加
          $item->title .= sprintf(' (%d)', $category->count);
        }
      }
    }
  }
  return $items;
}, 10, 3);

さいごに

今回紹介した方法を使えば、グローバルナビメニューにカテゴリーごとの投稿数を簡単に表示できます。
これにより、ユーザーは各カテゴリーの活性度を一目で把握でき、ナビゲーションがより便利になるでしょう。

タイトルとURLをコピーしました