サポート » 使い方全般 » 検索結果や404ページのヘッダーなどをカテゴリーごとに振り分けたいのですが…

  • 個別ページ(single.php)をカテゴリ別に振り分けたい時、

    <?php
    if ( in_category(‘スラッグ’) ) {
    include(TEMPLATEPATH . ‘/single-1.php’);
    } else if ( in_category(‘スラッグ’) ) {
    include(TEMPLATEPATH . ‘/single-2.php’);
    } else if ( in_category(‘スラッグ’) ) {
    include(TEMPLATEPATH . ‘/single-3.php’);
    } else {
    include(TEMPLATEPATH . ‘/single-4.php’);
    }
    ?>

    このようなソースを「single.php」に書いて、「single-1.php」のようにテンプレートファイルを作成すれば良いという記事を見かけたのですが、

    「search.php」や「404.php」も同様にこの手段で振り分けることは可能なのでしょうか?

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • 問題ないです。
    というか、まずは試してみられると良いのではないかと思います。

    includeに関してはWPではget_template_partという関数があります。
    ヘッダーについてはget_headerという関数が用意されていますのでご参照ください。

    https://wpdocs.osdn.jp/関数リファレンス/get_template_part

    https://wpdocs.osdn.jp/関数リファレンス/get_header
    このページに404のサンプルがありました。

    トピック投稿者 shinkichi

    (@shinkichi)

    早々のご回答に感謝いたします。

    今試せるところにいないのに、不意に上で書いたことがよぎり、検索して見たものの思うような答えが全く見当たらず。明日、試す前に答えをいただけないかと思って投稿させていただきました。

    明日、実際に試した上で、再度報告をしようと思っております。

    モデレーター jim912

    (@jim912)

    「search.php」や「404.php」も同様にこの手段で振り分けることは可能なのでしょうか?

    条件分岐タグの in_category は、ループ中の投稿が、パラメータで指定されたカテゴリーに属するかどうかを判定するタグです。

    404のときは、そもそも投稿が存在しませんし、検索の時はどのカテゴリーの投稿がヒットするか不明ですから(固定ページがヒットするかもしれませんし)in_category では、望む結果を得ることは難しいと思われます。

    前提となっている「検索結果や404ページのヘッダーなどをカテゴリーごと」というのが、今ひとつよくわからないので、具体例などを示しつつ、説明いただけるとありがたいです。

    • この返信は7年、 8ヶ月前にjim912が編集しました。

    あ、カテゴリーごとに振り分けって書かれてますね。
    単純に404だけ別ヘッダーと思い込んで書いてました。
    ちゃんと読まないとダメですね。失礼しました。

    トピック投稿者 shinkichi

    (@shinkichi)

    ご回答ありがとうございます。言葉足らずですみませです。

    トップがあり、カテゴリー01とカテゴリー02があります。構成はとてもシンプルなのですが、これをなんちゃってポータルサイトみたいな感じで作っております。ですのでカテゴリー01と02を独立したページとしてとらえています。

    例えば、トップで検索するとカテゴリー01と02の記事を検索できるけれど、カテゴリー01にいったら、カテゴリー01のみの記事を検索できるようにしています。つまり、カテゴリー01の中だけで回遊させるようにしています。

    なので、トップ、カテゴリー01、カテゴリー02を表示した時に、ヘッダーとフッターの色などの装飾を変えています。さらに言うとトップにはサイドナビはないけれど、カテゴリーページではサイドナビを表示するように振り分けています。

    検索結果までは苦戦はしたもののひとまず振り分けが出来たのですが、一番簡単にできると思った404ページでつまづいてしまったのです。

    <?php if( in_category( 1 ) ): ?>
    <?php get_header( ’01’ ); ?>
    <?php elseif ( in_category( 2 ) ): ?>
    <?php get_header( ’02’ ); ?>
    <?php else: ?>
    <?php get_header( ‘top’ ); ?>
    <?php endif; ?>

    <div id=”content” class=”cf”>
    404 Not Found
    申し訳ございません。お探しのページは存在しません。
    トップページにお戻りいただくか、違うキーワードで検索しなおしてください。
    → トップページへ戻る
    </div>

    <?php if( is_page( array(220,224,244) ) ): ?>
    <?php get_sidebar( ‘abura’ ); ?>
    <?php elseif ( is_page( array(222,226,246) ) ): ?>
    <?php get_sidebar( ‘tabemono’ ); ?>
    <?php endif; ?>

    <?php if( in_category( 1 ) ): ?>
    <?php get_footer( ’01’ ); ?>
    <?php elseif ( in_category( 2 ) ): ?>
    <?php get_footer( ’02’ ); ?>
    <?php else: ?>
    <?php get_footer( ‘top’ ); ?>
    <?php endif; ?>

    本当にざっくりですが、こんな感じで検索結果ページを作り、これがひとまずうまく表示されたので、これをもとにして404も作ったのですが、ヘッダーもフッターも最後に書いている「top」のもので表示されてしまうのです。

    jim912さんが「条件分岐タグの in_category は、ループ中の投稿が、パラメータで指定されたカテゴリーに属するかどうかを判定するタグです。404のときは、そもそも投稿が存在しませんし~in_category では、望む結果を得ることは難しいと思われます。」と言うのを拝見して、これは根本的に間違えているのかも知れないと思った次第です。

    しかし答えはいまだ見つからず、そもそも404を振り分けるのは出来ないのでしょうか?

    どうすれば実現できるかわかりませんが
    「検索ボタンを押したページのカテゴリー」で検索結果ページを振り分ける
    「リンクが置かれていたページのカテゴリー」で404ページを振り分ける
    のですよね。つまり「遷移する前のページのカテゴリー」をどのように後のページへ伝えるか?と考えればよさそうです。

    トピック投稿者 shinkichi

    (@shinkichi)

    ご投稿ありがとうございます。
    自分で思う以上に厄介なことか、そもそもそんなことできないのかということにも行き着かず。午前中あれこれ試したり検索したのですが、答えは見つかりませんでした。今の自分には無理であることははっきりしたので、トップ用のもので作成して、合間に検証を続けようと思います。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「検索結果や404ページのヘッダーなどをカテゴリーごとに振り分けたいのですが…」には新たに返信することはできません。