サポート » 使い方全般 » カテゴリー別に呼び出しテンプレートを変えたい

  • こんにちは。
    バージョン 2.9.2のdefault themeにてサイトを構築しています。

    サイトには大きく8つのカテゴリーがあり、またそれぞれのカテゴリーにサブカテゴリーも
    3〜5個程度設定しました。

    合計30個程度のカテゴリーがあるのですが
    カテゴリーごとにヘッダーのテンプレートを変更したいのです。

    現在、ヘッダーに

    =================================
    <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;
    <html xmlns=”http://www.w3.org/1999/xhtml&#8221; <?php language_attributes(); ?>>

    <?php if(in_category(’16’))
    { include (TEMPLATEPATH . ‘./header_cat16.php ‘); return; }
    ?>
    <?php if(in_category(‘1’))
    { include (TEMPLATEPATH . ‘./header_cat1.php ‘); return; }
    ?>
    =================================

    と記述し、それぞれのカテゴリーのヘッダーを呼び出そうとしているのですが
    うまく呼び出してくれません。。。

    呼び出そうとしている、header_cat1.phpには

    ==================================

    <?php
    /**
    * @package WordPress
    * @subpackage Default_Theme
    */

    get_header();
    ?>

    <head profile=”http://gmpg.org/xfn/11″&gt;
    <meta http-equiv=”Content-Type” content=”<?php bloginfo(‘html_type’); ?>; charset=<?php bloginfo(‘charset’); ?>” />

    〜〜〜〜〜〜

    ====================================

    と、記述しました。

    根本的な段階で間違っているかもしれませんが
    どなたかご教授いただければ幸いです。

    どうぞよろしくお願いいたします!

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • こんにちは。

    <?php if(in_category('16'))
    { include (TEMPLATEPATH . './header_cat16.php '); return; }
    ?>

    などの読み込みの指定についてですが、主に問題となっているのは、 ‘./header_cat16.php’ のファイルパス文字列先頭の . だと思われます。

    <?php if ( in_category(16) ) include TEMPLATEPATH . '/header_cat16.php'; ?>

    などのように ./ を / へ変更してみてください。あと気になるのは、 in_category() が条件分岐タグとして妥当かどうかですね(これは使用するケースによると思います)。

    これはheader.phpにheader_cat1.phpなどを読み込もうとなされてるんでしょうか???
    それならばheader_cat1.phpに

    <?php
    /**
    * @package WordPress
    * @subpackage Default_Theme
    */
    
    get_header();
    ?>

    の記述は共食いになっていると思います。

    あ、ほんとだ! むしろそれが原因ですね。私の回答はスルーしてください……

    あ、mizubeさんがご指摘のところもTEMPLATEPATH(←末尾にスラッシュなし)という定数が当てられているので問題になると思います。include (TEMPLATEPATH.'/./header_cat1.php')なら(偶然?)いけるかもしれません(今まで何気なく使っていたので自信ないですが)。

    トピック投稿者 get_up_kids76

    (@get_up_kids76)

    mizubeさま akihiroさま

    こんにちは。
    早速のご返答ありがとうございます!!!

    昨日ご返答頂き、こちらでご指摘箇所を修正してみたのですが
    やはり動きません。。。(初心者すぎてすみません。。)

    修正後、反映先ページのソースを表示させると
    見事ヘッダー部分の記述が抜けていました。

    ちなみに、昨日ご教授頂いた後のWordPressのテンプレートです。
    引き続きお助けいただけると幸いです。

    ヘッダー.php
    ========================================================================

    <?php
    /**
    * @package WordPress
    * @subpackage Default_Theme
    */
    ?>
    <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;
    <html xmlns=”http://www.w3.org/1999/xhtml&#8221; <?php language_attributes(); ?>>

    <?php if(in_category(’16’))
    { include (TEMPLATEPATH. ‘/header_cat16.php ‘); return; }
    ?>
    <?php if(in_category(‘1’))
    { include (TEMPLATEPATH. ‘/header_cat1.php ‘); return; }
    ?>

    <head profile=”http://gmpg.org/xfn/11″&gt;
    <meta http-equiv=”Content-Type” content=”<?php bloginfo(‘html_type’); ?>; charset=<?php bloginfo(‘charset’); ?>” />

    <title>タイトル</title>

    〜〜〜〜〜〜〜〜〜〜

    ========================================================================

    header_cat1.php
    ========================================================================

    <head profile=”http://gmpg.org/xfn/11″&gt;
    <meta http-equiv=”Content-Type” content=”<?php bloginfo(‘html_type’); ?>; charset=<?php bloginfo(‘charset’); ?>” />

    <title>タイトル</title>

    〜〜〜〜〜〜〜〜〜〜

    ========================================================================

    akihiroさまにご返答いただきました
    include (TEMPLATEPATH.’/./header_cat1.php’)も一度試してはみたのですが
    どうにもうまくいきませんでした。

    どうかお力添えを頂戴できますでしょうか。

    よろしくお願いします!!

    試していないのでなんともいえませんが、インクルードする前にちゃんと機能しているか試してみてはいかがですか?

    <?php
    /**
    * @package WordPress
    * @subpackage Default_Theme
    */
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
    
    <?php if(in_category('16'))
    { echo "カテゴリー16"; }
    ?>
    <?php if(in_category('1'))
    { echo "カテゴリー1"; }
    ?>
    
    <head profile="http://gmpg.org/xfn/11">
    <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
    
    <title>タイトル</title>

    この状態でヘッダ部分に文字が表示されることが確認できたらインクルードを試せばよいと思います。
    文字が表示されない場合は分岐が間違っている(表示しているページでカテゴリーIDをちゃんと認識していないなど)、表示される場合はインクルードに問題があるのでしょう。(passの違いかファイルの記述ミスか)

    いっぺんに行わずに問題の切り分けを行いながら挑戦しましょう!

    トピック投稿者 get_up_kids76

    (@get_up_kids76)

    shokun0803さま

    こんにちは。
    早速お返事いただいていたにも関わらず御礼が遅くなりました。。。

    さて、ご指摘いただいたとおり一度原点に返り
    普通に(なにも指示はせずプレーンな状態)表示させてみました。
    これは、自分の思い通りの表示をしてくれます。

    しかし、ご教授頂いた

    <?php if(in_category(’16’))
    { echo “カテゴリー16”; }
    ?>
    <?php if(in_category(‘1’))
    { echo “カテゴリー1”; }
    ?>

    を入れてみても、カテゴリーごとに表示が変わりませんでした。。。

    分岐が間違っているというご指摘をいただいていましたが
    この場合はどういった対処法があるのでしょうか?

    検索してみたりしたのですが。。。

    何卒お力添えをお願いいたします!!

    ページのソースはご覧になりました?
    <head profile="http://gmpg.org/xfn/11">
    の上に、「カテゴリー16」や「カテゴリー1」と書かれていませんか?

    トピック投稿者 get_up_kids76

    (@get_up_kids76)

    shokun0803さま、LVP8さま

    初心者すぎて本当にすみません!!
    ご回答に感謝いたします。

    先ほど、header.phpに
    <?php if(in_category(’16’))
    { echo “カテゴリー16”; }
    ?>
    <?php if(in_category(‘1’))
    { echo “カテゴリー1”; }
    ?>

    を設定するとページ上部に「カテゴリー16」「カテゴリー1」の表記がありました!!
    これで、呼び出しは出来ているという事なのでしょうか?

    このタグをインクルードに変えれば良いのですよね。。

    を設定するとページ上部に「カテゴリー16」「カテゴリー1」の表記がありました!!

    カテゴリー16の記事を見ている時にカテゴリー16の表記がありますか?まさかと思いますが、全てのページでカテゴリー16カテゴリー1と表示されたりはしていませんよね?

    まあ、上記前提ですが、これで分かったことは分岐方法は間違っていない、と言うことだけです。つまり、最初に提示しているコードのインクルードもしくはインクルードされているファイルに問題があることが「切り分けられた」に過ぎません。

    次のステップはインクルードするファイルの中身をごく簡単な物、例えば

    echo "カテゴリー16のインクルードファイル";

    だけのファイルにして表示されるか確認してみましょう。また、インクルードしようとしているURLの場所にファイルがない可能性も調査しましょう。

    <?php if(in_category('16'))
    { echo TEMPLATEPATH. '/header_cat16.php '; }
    ?>

    とした時に表示されるURLが実際に表示させたいURLになっているか確認するといいかもです。

    ‘/header_cat16.php ‘

    に余計なスペースが入っているのも問題かもしれません。スペースを取り除いて’/header_cat16.php’にしましょう。以下のコードはサンプルです。

    header.php

    <?php
    /**
    * @package WordPress
    * @subpackage Default_Theme
    */
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
    
    <?php
    if(in_category('16')){
    	include (TEMPLATEPATH . '/header_cat16.php');
    }elseif(in_category('1')){
    	include (TEMPLATEPATH . '/header_cat1.php');
    }
    ?>
    
    <head profile="http://gmpg.org/xfn/11">
    <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
    
    <title>タイトル</title>

    header_cat1.php

    <head profile="http://gmpg.org/xfn/11">
    <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
    
    <title>タイトル</title>

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「カテゴリー別に呼び出しテンプレートを変えたい」には新たに返信することはできません。