Title: カテゴリー別のレイアウトを子カテゴリにも反映させたいのですが
Last modified: 2016年7月30日

---

# カテゴリー別のレイアウトを子カテゴリにも反映させたいのですが

 *  解決済 [iketoshi](https://ja.wordpress.org/support/users/iketoshi/)
 * (@iketoshi)
 * [11年、 6ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%88%a5%e3%81%ae%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6%e3%83%88%e3%82%92%e5%ad%90%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%82%82%e5%8f%8d%e6%98%a0/)
 * お世話になります。
    アーカイブまたはカテゴリでカテゴリに属する投稿を表示する際
   に、特定のカテゴリだけレイアウトを変えたかったため、カテゴリにスラッグ名を付け、
   categry-スラッグ名として対応しておりました。 今回、そのカテゴリの子カテゴリに
   もレイアウトを反映させたいのですが、何か方法はありますでしょうか？
 * 子カテゴリは、先々増えていきますので、子カテゴリ分のカテゴリレイアウトを個別に
   作ることは避けたいです。
 * if文で条件分岐で記述することは、最終手段としたいです。
 * いろいろと調べましたが、スマートな方法がわかりませんでした。カスタム投稿で個別に
   作成するなどすると、出来たりするのでしょうか？
 * 宜しくお願い致します。

10件の返信を表示中 - 1 - 10件目 (全10件中)

 *  [kuck1u](https://ja.wordpress.org/support/users/kuck1u/)
 * (@kuck1u)
 * [11年、 6ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%88%a5%e3%81%ae%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6%e3%83%88%e3%82%92%e5%ad%90%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%82%82%e5%8f%8d%e6%98%a0/#post-204964)
 * こんにちわ、iketoshiさん。
 * 親カテゴリーがあればそれを、無ければ自分を CSS クラスに加えるという処理をして
   あげればよいと思います。
 *  トピック投稿者 [iketoshi](https://ja.wordpress.org/support/users/iketoshi/)
 * (@iketoshi)
 * [11年、 6ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%88%a5%e3%81%ae%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6%e3%83%88%e3%82%92%e5%ad%90%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%82%82%e5%8f%8d%e6%98%a0/#post-204981)
 * KUCKLUさん、ありがとうございます。
    今回、表示わけさせたい形ですが、
 * カテゴリAの表示：タイトルとサムネイルの表示
    カテゴリBの表示：タイトルと指定した
   カスタムフィールドの表示 カテゴリcの表示：タイトルと全文の表示
 * ざっくりとですが、レイアウトだけでなく、表示内容を分けたいと思っています。
    現在
   カテゴリのPHPファイルを3つ作成し、表示を分けていましたが、Aの子カテゴリを作っ
   た場合、Aの子カテゴリもAと同じ表示にしたいと思っています。
 * 何か方法は、ありますでしょうか。
    宜しくお願いします。
 *  [kuck1u](https://ja.wordpress.org/support/users/kuck1u/)
 * (@kuck1u)
 * [11年、 6ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%88%a5%e3%81%ae%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6%e3%83%88%e3%82%92%e5%ad%90%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%82%82%e5%8f%8d%e6%98%a0/#post-204997)
 * 失礼いたしました。
    何故、CSS なんて回答したのか・・・ orz
 * 話しは戻りますが、レイアウトの種類が限られているのであれば
 * content-a.php
    content-b.php content-c.php
 * を用意して、 `get_template_part()` 関数で切り分けるのがよいかと思います。
    切り分け
   自体は、archive.php か category.php で行うのがよいかと思います。
 *  トピック投稿者 [iketoshi](https://ja.wordpress.org/support/users/iketoshi/)
 * (@iketoshi)
 * [11年、 6ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%88%a5%e3%81%ae%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6%e3%83%88%e3%82%92%e5%ad%90%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%82%82%e5%8f%8d%e6%98%a0/#post-205034)
 * KUCKLUさん、ありがとうございます。
    数日空いてしまいました。
 * 今回は、カテゴリテンプレートの表示分けをしたかったので、
    categry-a.php categry-
   b.php categry-c.php categry.php を作ってa･b･cの表示分けは、現状できているところ
   からのスタートです。
 * 上手に説明できず、すみません・・・
 * aのカテゴリを選べばcategry-a.phpの表示になりますが、「a」の下にも子カテゴリが
   あり、「aほにゃらら」というaの子カテゴリを選ぶと、categry.phpの表示となります。
   
   当たり前ですが、作っている最中は気が付きませんでした・・・
 * 「a」の子カテゴリを選んだ時もcategry-a.phpの表示にしたいのですが、可能なのか、
   根本的に方法を変えなければいけないのかがわかりません。
 * a･b･cは、大きな改変が無い限り、永続的に変わりませんが、子カテゴリは運用の中で
   増えていき、事前に作れませんし、いくつになるかわからないので、categry-a01.php
   と都度テンプレートを増やしたくありません。
 * 何か方法は、ありますでしょうか。
    宜しくお願いします。
 *  [nobita](https://ja.wordpress.org/support/users/nobita/)
 * (@nobita)
 * [11年、 6ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%88%a5%e3%81%ae%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6%e3%83%88%e3%82%92%e5%ad%90%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%82%82%e5%8f%8d%e6%98%a0/#post-205035)
 * こんにちは、
 * [@iketoshi](https://ja.wordpress.org/support/users/iketoshi/) さんが、行われて
   いる方法は、テンプレート階層（名前付けルールに基づいた、自動的なテンプレートの
   適用）を使ったテンプレートの分岐ですよね。
 * この方法だと、スラッグやIDを使うために、おっしゃっているような「カテゴリグループ」
   みたいな指定はできないので、テンプレートが山になるのと、手動で作らなければなり
   ませんので
 * > a･b･cは、大きな改変が無い限り、永続的に変わりませんが、子カテゴリは運用の中
   > で増えていき、事前に作れませんし、いくつになるかわからないので、categry-a01.
   > phpと都度テンプレートを増やしたくありません。
 * という方法が実現できません。
 * WordPressのテンプレートの適用方法には、@KUCKLU さんが説明されている通り、
 * `get_template_part()`等の関数を使う事で、いわば手動でテンプレート階層的な動作
   を作り上げることが出来ます。
 * しかし、`is_category()`での条件分岐を行う以上、新しい子カテゴリが発生するたび
   に、テンプレートの書き換えが必要になります。
 * なので、カテゴリグループ（?）を検出して、そういうもので条件分岐をするといいの
   ではないかと思います。
 * 以下は、ちょっと思いつきのサンプルですが、テンプレートでの条件分岐にも使えると
   思いますので検討してみてください。
 * 以下の例は、フィルタで、テンプレートを強制的に他のものに変更しています。
    カテゴリ
   ID41とその子カテゴリは、category.phpの代わりに、index.phpが適用されます。
 * functions.php
 *     ```
       add_filter( 'template_include', 'action_function' );
   
       function action_function( $template) {
       	//カテゴリグループを検出　（　なんか他にやり方もありそうですが、、、）
       	$args = array(
       	'type'                     => 'post',
       	'child_of'                 => 41,
       	);
       	$ids = array( $args['child_of'] );
       	$categories = get_categories( $args );
   
       	foreach ( $categories as $category ) {
   
       		$ids[] = absint( $category->term_id );
       	}
       	//カテゴリID41とその子カテゴリを配列に入れて条件分岐
   
       	if ( is_category( $ids ) ) {
       		//これは、サンプルなので、indexテンプレートを呼び出しています。
       		return get_index_template();
       	}
       	return $template;
       }
       ```
   
 * 他にも、カスタムタクソノミなどを使って、テンプレートグループを指定してやるとか、
   他にも方法はありそうな感じです。
 *  [Masahi–ro](https://ja.wordpress.org/support/users/masahi-ro/)
 * (@masahi-ro)
 * [11年、 5ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%88%a5%e3%81%ae%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6%e3%83%88%e3%82%92%e5%ad%90%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%82%82%e5%8f%8d%e6%98%a0/#post-205068)
 * 似たような事を最近行ったので可能ですよ。
 * categry.phpに親カテゴリがaの場合categry-a.php
    を読み込むという分岐を書いてくだ
   さい。 ご希望の仕様ですと下記が参考になると思います。
 * [http://wpdocs.sourceforge.jp/関数リファレンス/in_category](http://wpdocs.sourceforge.jp/関数リファレンス/in_category)
 *  トピック投稿者 [iketoshi](https://ja.wordpress.org/support/users/iketoshi/)
 * (@iketoshi)
 * [11年、 5ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%88%a5%e3%81%ae%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6%e3%83%88%e3%82%92%e5%ad%90%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%82%82%e5%8f%8d%e6%98%a0/#post-205069)
 * ご連絡が大変遅くなりました！
    nobitaさん　masahi–roさん、ありがとうございます。
   KUCKLUさんの話が、よく理解できていなかったようです。
 * get_template_part()を今まで使ったことがありませんでした。
    いろいろと調べた結果、
   皆さんの言われていることが理解できました。functions.phpに記述できるのがスマート
   な方法と思いますが、現状、私にはハードルが高いため、将来的にfunctions.phpに書き
   写し、今回はmasahi–roさんの方法でやってみようと思います。
 * 現在、categry.phpに下記の記述をしてみました。
 * <?php
    if ( in_category( ‘4’ ) || post_is_in_descendant_category( ‘4’ ) ) { include(
   TEMPLATEPATH.’/category-blog.php’); } elseif ( in_category( ‘9’ ) || post_is_in_descendant_category(‘
   9’ ) ) { include(TEMPLATEPATH.’/category-class.php’); } else { include(TEMPLATEPATH.’/
   category-others.php’); } ?>
 * 4と9のカテゴリ以外、ページが表示できません。4か4の子孫カテゴリーの場合、category-
   blog.phpをインクルードしているつもりですが、初めての記述で、よく理解できていま
   せん。
 * どの部分が違っていますでしょうか？
    度々の質問ですみません。宜しくお願いします。
 *  [nobita](https://ja.wordpress.org/support/users/nobita/)
 * (@nobita)
 * [11年、 5ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%88%a5%e3%81%ae%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6%e3%83%88%e3%82%92%e5%ad%90%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%82%82%e5%8f%8d%e6%98%a0/#post-205070)
 * もう少し、ひねりが必要でしたね
 * カテゴリアーカイブで、テンプレートの条件分岐を行うためには、is_category() を使う
   必要があると思います。
 * なので、in_category()のコードを、is_category()に直さないといけないと思います。
   （
   post_is_in_descendant_category( ‘9’ ) の中身の書き換えも必要　）
 * それと、include()　を使っていますが、
    （　[Codexでincludeを使ったコードサンプルがありますが、これ、良い書き方じゃありません](http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/in_category)）
 * それは、なんでか？
 *     ```
       include(TEMPLATEPATH.'/category-others.php');
       ```
   
 *     ```
       include(TEMPLATEPATH
       ```
   
 * 　は、常に親テンプレートのパスを返します。
 * これが、なんでよくないかというと、チャイルドテーマを作った場合にテンプレートが
   動作しなくなるので、ちょっとした不具合を、チャイルドテーマで試験的に修正するといった
   作業ができなくなるためです。
 * なので、チャイルドテーマの場合は、自動的にパスを調整してくれる
 * `get_template_part()`　を使ったほうが、後々　楽ちんになるためです。
 * ざっくりした内容でごめんなさい。
 * 追記：codex 修正済み
 * 間違っていたら、どなたか修正ください
 *     ```
       <?php
       if ( in_category('fruit') ) {
       	include( 'single-fruit.php' );
       } elseif ( in_category('vegetables') ) {
       	include( 'single-vegetables.php' );
       } else {
       	// 普通にループを続ける
       	if ( have_posts() ) : while ( have_posts() ) : the_post();
       	// ...
       }
       ?>
       ```
   
 * include > get_template_part
    single > some ファイル名　singleだと、テンプレート
   階層とコンフリクトする可能性あるので、
 *     ```
       <?php
       if ( in_category('fruit') ) {
       	get_template_part( 'some', 'fruit' );
       } elseif ( in_category('vegetables') ) {
       	get_template_part( 'some', 'vegetables' );
       } else {
       	// 普通にループを続ける
       	if ( have_posts() ) : while ( have_posts() ) : the_post();
       	// ...
       }
       ?>
       ```
   
 *  トピック投稿者 [iketoshi](https://ja.wordpress.org/support/users/iketoshi/)
 * (@iketoshi)
 * [11年、 5ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%88%a5%e3%81%ae%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6%e3%83%88%e3%82%92%e5%ad%90%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%82%82%e5%8f%8d%e6%98%a0/#post-205071)
 * 勉強になります。
 * <?php
    if ( in_category( ‘4’ ) || post_is_in_descendant_category( ‘4’ ) ) { get_template_part(‘
   category’, ‘blog’ ); } elseif ( in_category( ‘9’ ) || post_is_in_descendant_category(‘
   9’ ) ) { get_template_part( ‘category’, ‘class’ ); } else { get_template_part(‘
   category’, ‘others’ ); } ?>
 * 上記の形で、やっと出来ました・・・ただ、functions.phpに下記を追記しました。
 * function post_is_in_descendant_category( $cats, $_post = null ){
    foreach ( (
   array) $cats as $cat ) { $descendants = get_term_children( (int) $cat, ‘category’);
   if ( $descendants && in_category( $descendants, $_post ) ) return true; } return
   false; } ?>
 * ↑この動きをしてくれるのが、post_is_in_descendant_category()と思っていましたが、
   なぜfunctions.phpに追記しなければいけないのかわかりません・・
 * functions.phpに追記なしで、blogとblogの子孫カテゴリーに属するIF文はかけないので
   しょうか？解決はいたしましたが、もやもやが消えません。
    根本的な理解が間違って
   いますでしょうか？
 *  トピック投稿者 [iketoshi](https://ja.wordpress.org/support/users/iketoshi/)
 * (@iketoshi)
 * [11年、 5ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%88%a5%e3%81%ae%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6%e3%83%88%e3%82%92%e5%ad%90%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%82%82%e5%8f%8d%e6%98%a0/#post-205072)
 * 閉め忘れておりました。
    KUCKLUさん、nobitaさん、Masahi–roさん、ありがとうござ
   いました。

10件の返信を表示中 - 1 - 10件目 (全10件中)

 トピック「カテゴリー別のレイアウトを子カテゴリにも反映させたいのですが」には新た
に返信することはできません。

## タグ

 * [アーカイブ　カテゴリ　個別　レイアウ](https://ja.wordpress.org/support/topic-tag/%e3%82%a2%e3%83%bc%e3%82%ab%e3%82%a4%e3%83%96%e3%80%80%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%80%80%e5%80%8b%e5%88%a5%e3%80%80%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6/)

 * フォーラム: [使い方全般](https://ja.wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 10件の返信
 * 4人の参加者
 * 最後の返信者: [iketoshi](https://ja.wordpress.org/support/users/iketoshi/)
 * 最後の活動: [11年、 5ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e5%88%a5%e3%81%ae%e3%83%ac%e3%82%a4%e3%82%a2%e3%82%a6%e3%83%88%e3%82%92%e5%ad%90%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%ab%e3%82%82%e5%8f%8d%e6%98%a0/#post-205072)
 * 状態: 解決済

## トピック

### 人気のトピック

### 返信がないトピック

### サポート関連ではないトピック

### 解決済みのトピック

### 未解決のトピック

### すべてのトピック
