サポート » 使い方全般 » カスタム投稿タイプの子カテゴリアーカイブの表示

  • functions.phpを編集して「work」というカスタム投稿タイプを設定し、
    その中で親子関係のあるカテゴリを作成しています。

    個別ページや親カテゴリアーカイブは問題ないのですが、
    子カテゴリアーカイブにおいて、archive-work.phpが読みこまれず、
    index.phpが表示されてしまいます。

    カスタム投稿タイプのアーカイブ用テンプレート
    上記を参考に、register_post_typeを見てみましたが
    ‘has_archive’ => trueになっていました。

    カテゴリは以下のような構成です。
    親-子1
     -子2
     -子3

    また、パーマリンクは以下のように設定しています。
    /%category%/%postname%.html

    どのような原因が考えられるでしょうか。
    ご教授いただければ幸いです。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック投稿者 yd2

    (@yd2)

    パーマリンクは/%category%/%postname%/に変更しました。

    モデレーター Takuro Hishikawa

    (@hissy)

    その中で親子関係のあるカテゴリを作成しています。

    とありますが、カテゴリー(タクソノミー)ですか?投稿タイプですか?

    トピック投稿者 yd2

    (@yd2)

    hissyさん、ありがとうございます。
    タクソノミーをカテゴリとして使っています。

    モデレーター Takuro Hishikawa

    (@hissy)

    なるほど、分かりました。
    ええと、親のタクソノミーのスラッグがついたテンプレートファイルは子のタクソノミーアーカイブでは使われません。それが標準の挙動です。子のタクソノミーのスラッグそれぞれにテンプレートファイルを用意してやるか、ひとつのテンプレートファイルの中で条件分岐するしかないでしょう。

    テーマフォルダの functions.php に以下をコピペすると
    自分のテンプレートファイルがなければ、
    先祖を遡ってカテゴリーのテンプレートファイルを適用しようとします。

    add_filter( 'category_template', 'my_category_template' );
    function my_category_template( $template ) {
      if ( '' == $template || false !== strpos( $template, '/category.php' ) ) {
    
        $category = get_queried_object();
        $templates = array();
    
        while ( $category->parent ) {
          $category = get_category( $category->parent );
          $templates[] = "category-{$category->slug}.php";
          $templates[] = "category-{$category->term_id}.php";
        }
    
        if ( $temp = locate_template( $templates ) )
          $template = $temp;
      }
    
      return $template;
    }

    「category」をご利用のタクソノミーのスラッグ名に変更すれば良い気がします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「カスタム投稿タイプの子カテゴリアーカイブの表示」には新たに返信することはできません。