はじめに
以下をCocoonで実現します。
おすすめカードを、カテゴリーページごとに変更します。
この記事では、この方法について説明します。
実装手順
以下の手順で実装します。
- ラベルCocoon設定
表1に示す項目を設定をします。
該当のカテゴリーページ以外では、「メニュー選択」で設定されたメニューが表示されます。Cocoon設定 設定 大項目 項目 設定値 おすすめカード おすすめカード設定 メニュー選択 - ラベルPHPを追加
以下のコードをfunctions.phpに追加します。
例えば、カテゴリーID=123の場合、外観→メニューで設定したメニュー名「menu123」に変更します。add_filter('theme_mod_recommended_cards_menu_name', function ($current_mod) { // カテゴリーIDとメニュー名の対応を設定 $cat_menu_map = [ 123 => 'menu123', 456 => 'menu456', ]; if (is_category()) { // 現在のカテゴリーIDを取得 $cat_id = get_queried_object_id(); // 対応するカテゴリーIDがある場合 if (isset($cat_menu_map[$cat_id])) { $current_mod = $cat_menu_map[$cat_id]; } } return $current_mod; });
ノーコードで実現する方法
ノーコードで実現するなら、Cocoon設定→おすすめカードではなく「おすすめカード」ウィジェットを使用します。
この際、表示設定でカテゴリーを指定し、カテゴリーごとに複数「 おすすめカード」ウィジェットを配置します。
参考:カテゴリー編集にメニュー設定を追加する方法
投稿→カテゴリー→カテゴリー編集に、独自にの設定項目「おすすめカード」を追加します。
完成イメージ

実装手順
以下のコードをfunctions.phpに追加します。
// カテゴリー編集にメニューを追加
add_action('category_edit_form_fields', function ($term) {
// ナビゲーションメニュー一覧を取得
$menus = wp_get_nav_menus();
// 保存済みメニューIDを取得
$menu_id = get_term_meta($term->term_id, 'my_category_recommended_cards', true);
?>
<tr class="form-field term-menu-wrap">
<th>
<label for="category_recommended_cards">おすすめカード</label>
</th>
<td>
<?php wp_nonce_field('category_recommended_cards_action', 'category_recommended_cards_nonce'); ?>
<select name="category_recommended_cards" id="category_recommended_cards">
<option value="">未選択</option>
<?php foreach ($menus as $menu) : ?>
<option value="<?= esc_attr($menu->term_id); ?>" <?php selected($menu_id, $menu->term_id); ?>><?= esc_html($menu->name); ?></option>
<?php endforeach; ?>
</select>
<p class="description">このカテゴリーに表示するおすすめカードを選択してください。</p>
</td>
</tr>
<?php
});
// カテゴリー編集の設定を保存
add_action('edited_category', function ($term_id) {
// nonceチェック
if (!isset($_POST['category_recommended_cards_nonce']) || !wp_verify_nonce($_POST['category_recommended_cards_nonce'], 'category_recommended_cards_action')) {
return;
}
if (isset($_POST['category_recommended_cards'])) {
update_term_meta($term_id, 'my_category_recommended_cards', (int) $_POST['category_recommended_cards']);
}
});
// Cocoon設定(おすすめカード)のメニューを変更
add_filter('theme_mod_recommended_cards_menu_name', function ($current_mod) {
if (!is_category()) {
return $current_mod;
}
$cat = get_queried_object();
$cat_id = $cat->term_id;
// カテゴリーに保存されたメニューIDを取得
$menu_id = get_term_meta($cat_id, 'my_category_recommended_cards', true);
// 有効なメニューIDの場合
if (!empty($menu_id) && is_nav_menu((int) $menu_id)) {
$current_mod = (int) $menu_id;
}
return $current_mod;
});
さいごに
今回紹介した方法を使えば、カテゴリーページごとにおすすめカードを簡単に変更することができます。
これにより、各カテゴリーに合わせた内容を提示し、訪問者の興味を引くことができるでしょう。

