Cocoon:設定で除外したカテゴリのカテゴリトップを復活させる方法 | あとりえ極星堂
現在、持ち込み用の新作を制作中です。情報守秘のため、詳細はしばらくお待ちください。

※ ページ内に広告が含まれています。

Cocoon:設定で除外したカテゴリのカテゴリトップを復活させる方法

現在、持ち込み用の新作を制作中です。
情報守秘のため、詳細はしばらくお待ちください。

Cocoon設定の【インデックス】タブで、アーカイブから該当カテゴリを除外すると、その該当カテゴリは新着記事一覧・関連記事一覧からも姿を消す。

だが、困ったことに、このとき、カテゴリトップページ=該当カテゴリの記事一覧ページが消滅する。
404になってしまう。ガチ消滅。

というわけで、ガチ消滅した該当カテゴリトップページを復活させる方法を記したのがこのページです。

広告

前提条件

前提条件は

Cocoon設定>【インデックス】タブで、アーカイブから該当カテゴリを除外

すること。

広告

funtion.phpに記載するコード

以下のコードをfuntion.phpに記載してアップロードしましょう。

除外したいカテゴリIDを「数値」で設定すること!!

//Cocoon設定の関連記事で除外設定したカテゴリトップを復活させる
// 除外したいカテゴリIDを「数値」で
$excluded_cat_ids = array(10, 20);

// カテゴリアーカイブの最終調整(親カテゴリでは子カテゴリ記事を除外/
/* 除外カテゴリ自身のアーカイブは生かす) */
add_action('pre_get_posts', function($q) use ($excluded_cat_ids){
  if (is_admin() || !$q->is_main_query() || !$q->is_category()) return;

  $term = get_queried_object();
  if (!($term && isset($term->term_id))) return;

  $term_id = (int) $term->term_id;

  // 1) 除外カテゴリ自身のアーカイブは「生かす」
  if (in_array($term_id, $excluded_cat_ids, true)) {
    // このカテゴリだけを対象にし、除外条件を外す
    $q->set('category__in', array($term_id));
    $q->set('category__not_in', array());

    // tax_query に category の NOT IN/NOT EXISTS があれば取り除く
    $tax = $q->get('tax_query');
    if (is_array($tax)) {
      $clean = array();
      foreach ($tax as $clause) {
        if (isset($clause['taxonomy'], $clause['operator'])
            && $clause['taxonomy'] === 'category'
            && in_array($clause['operator'], array('NOT IN','NOT EXISTS'), true)) {
          continue;
        }
        $clean[] = $clause;
      }
      $q->set('tax_query', $clean);
    }
    return;
  }

  // 2) それ以外(親カテゴリなど)では、除外カテゴリの記事を出さない
  $q->set('category__not_in', $excluded_cat_ids);
}, 50);

※本記事は私的備忘録です。自己責任でのご利用をお願いします。