「ボックスメニュー」などのメニュー設定をカテゴリーページごとに変更する方法

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

はじめに

以下のページでは、カテゴリーページごとにメニューを変更する方法を紹介しました。

以下のウィジェットについても、同様にカテゴリーページごとにメニュー設定を変更します。

  • おすすめカード
  • ナビカード
  • ボックスメニュー
  • ランキング

この記事では、この方法について説明します。

複数のウィジェットを並べ、それぞれの表示設定でカテゴリーごとに設定すると同じです。

実装手順

以下の手順で実装します。

  • ラベル
    PHPを追加(共通処理)

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

    /**
     * カテゴリーページに対応するメニューを返却
     *
     * @param array $cat_array カテゴリIDをキー、返したい値を値とした連想配列
     * @return mixed|null 対応する値、存在しない場合は null
     */
    if (!function_exists('get_category_value')):
    function get_category_value(array $cat_array) {
      if (!is_category()) {
        return null;
      }
    
      $cat_id = get_queried_object_id();
    
      return $cat_array[$cat_id] ?? null;
    }
    endif;
  • ラベル
    PHPを追加(おすすめカード)

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

    add_filter('recommended_cards_widget_name', function ($name) {
      // カテゴリーIDと対応するメニュー名の配列
      $cat_array = [
        123 => 'menu123',
        456 => 'menu456'
      ];
    
      return get_category_value($cat_array) ?? $name;
    });
  • ラベル
    PHPを追加(ナビカード)

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

    add_filter('navi_entries_widget_name', function ($name) {
      // カテゴリーIDと対応するメニュー名の配列
      $cat_array = [
        123 => 'menu123',
        456 => 'menu456'
      ];
    
      return get_category_value($cat_array) ?? $name;
    });
  • ラベル
    PHPを追加(ボックスメニュー)

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

    add_filter('box_menu_widget_name', function ($name) {
      // カテゴリーIDと対応するメニュー名の配列
      $cat_array = [
        123 => 'menu123',
        456 => 'menu456'
      ];
    
      return get_category_value($cat_array) ?? $name;
    });
  • ラベル
    PHPを追加(ランキング)

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

    add_filter('ranking_widget_id', function ($ranking_id) {
      // カテゴリーIDと対応するランキングID
      $cat_array = [
        123 => 111,
        456 => 222
      ];
    
      return get_category_value($cat_array) ?? $ranking_id;
    });

さいごに

今回紹介した方法を使えば、カテゴリーページごとにウィジェットメニューを柔軟に切り替えることができます。
これにより、サイトごとのデザインやコンテンツ表示をカテゴリ単位で最適化でき、運営効率も向上します。

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