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

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

完成イメージ

実装手順

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

add_filter('wp_nav_menu_objects', function ($items, $args) {
  // 対象のメニュー位置
  $target_locations = [
    'navi-header',          // ヘッダーメニュー
    'navi-mobile',          // ヘッダーモバイルメニュー
    'navi-header-mobile',   // ヘッダーモバイルボタン
    'navi-footer',          // フッターメニュー
    'navi-footer-mobile',   // フッターモバイルボタン
    'navi-mobile-slide-in', // モバイルスライドインメニュー
  ];

  // 対象外の位置の場合
  if (empty($args->theme_location) || !in_array($args->theme_location, $target_locations, true)) {
    return $items;
  }

  foreach ($items as $item) {
    if ($item->object === 'category') {
      $category = get_category($item->object_id);
      if (isset($category->count)) {
        $item->title .= sprintf(' (%d)', $category->count);
      }
    }
  }

  return $items;
}, 10, 2);

補足

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

wp_postmeta
キー内容
_menu_item_type

  • post_type=投稿、固定ページ

  • custom=カスタムリンク

  • taxonomy=カテゴリー、タグ

_menu_item_menu_item_parent1=親メニュー
_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) ""
  }
}
タイトルとURLをコピーしました