サポート » テーマ » カテゴリ別に検索結果デザインを変えたい

  • 解決済 wkkho

    (@wkkho)


    いつもお世話になっております。

    現在カテゴリでデザインを変えて作成しています。
    カテゴリ、アーカイブ、シングルページは、それぞれ同じ方法でデザインを変更できました。
    例:アーカイブ
    <?php
    $post = $wp_query->post;
    if ( in_category(‘1’) ) {
    include(TEMPLATEPATH . ‘/archive-name.php’);
    } elseif ( in_category(‘2’) ) {
    include(TEMPLATEPATH . ‘/archive-name2.php’);
    /**その他**/
    } else {
    include(TEMPLATEPATH . ‘/archive-others.php’);
    }
    ?>

    これを利用して、search.phpを作成しましたが、
    /**その他**/
    } else {
    include(TEMPLATEPATH . ‘/search-others.php’);
    }
    ?>
    ここだけが反映され、カテゴリーごとのテンプレートは読みませんでした。
    いろいろ検索したものの見つけられませんでした。
    searchだけは、他と根本的に違うものなのでしょうか。

    尚、カテゴリ分のWPをインストールすることは考えていません。
    ご教示の程よろしくお願い致します。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • モデレーター gatespace

    (@gatespace)

    こんにちは。

    まず、使われている「archive-name.php」というファイル名ですが、
    これがWordPressのテンプレート階層のファイル名とバッティングしています。
    例として、archive-name.php だと、nameという名前のカスタム投稿タイプのアーカイブテンプレートになります。

    まずはCodexのテンプレート階層のページをよく読まれて、
    今使われている以外のファイル名でためしてみてください。
    Codex:テンプレート階層

    なお、カテゴリーアーカイブはカテゴリー毎に
    category-slug.php
    (カテゴリーのスラッグが “news” の場合は category-news.php)
    と言った形でテンプレートファイルを用意できます。

    トピック投稿者 wkkho

    (@wkkho)

    お返事ありがとうございます。
    すいません、書き方がわかりにくかったですね。
    アーカイブに関しては、例なので、実際はnameは使っていません。
    でも名前のバッティングは初めて知りましたので、以後気を付けたいと思います。
    category-slug.phpなどで、カテゴリーとアーカイブは成功しています。
    (実際はスラッグ名ではなく、任意の名前で使用できています)
    サーチだけがカテゴリーごとに設定できなくて困っています。

    <?php
    $post = $wp_query->post;
    if ( in_category(‘1’) ) {
    include(TEMPLATEPATH . ‘/search-××.php’);
    ~という書き方で書いたり、search-slug.phpや、search-ID.phpなども試しましたが、ダメでした。

    モデレーター gatespace

    (@gatespace)

    となると

    if ( in_category('1') ) {
    (以下略)

    が動いていないのでは?

    現在の投稿(あるいは指定した任意の投稿) に指定したカテゴリーが割り当てられているか調べます。

    wkkhoさんのおっしゃられている「検索結果」自体が
    どのようなクエリを元に出ているか現状では判断できません。

    通常の検索だと検索結果の各投稿がばらばらのカテゴリーに属している可能性があるので、
    in_categoryで判定されないのでは?
    もしかして、カテゴリーで絞り込みをしてから検索結果を出力しているのですか?

    トピック投稿者 wkkho

    (@wkkho)

    お返事ありがとうございます。
    教えていただいた内容で再度確認して試行してみます。
    また解決などしましたら、お知らせいたします。
    wpはいろいろな方のサイトでカスタマイズを知ることができるので、根本をわからないままの部分がありますので、またじっくりと考えてみます。

    モデレーター gatespace

    (@gatespace)

    「デザインを変えたい」とおっしゃられている部分がよく分からないので、
    もうちょっと書くと、

    1. 検索結果ページ(search.phpで表示されるページ)でも「ループ内」なら、in_category()は使えると思います。
    Twenty Eleven の search.php で説明しますが、
    31行目の
    get_template_part( 'content', get_post_format() );
    の周りを

    if ( in_category('1') ) {
        get_template_part( 'content', 'cat1' ); // content-cat1.php を読み込む
    } elseif ( in_category('2') ) {
        get_template_part( 'content', 'cat2' ); // content-cat2.php を読み込む
    } else {
        get_template_part( 'content', get_post_format() ); // content-{フォーマットタイプ}.php を読み込む
    }

    とすると、投稿毎にデザインは変えられるはずです。

    2. 検索結果ページ全体のデザインをカテゴリ毎に変えたい(ループ外でも変えたい)
    これについては通常の検索にプラスして「カテゴリ毎の絞り込み」を足さないといけないと思います。
    これについては検索するとたくさん引っかかりますでの、「wordpress 絞り込み」で検索してみてください。
    ここで「あらかじめ指定したカテゴリー」の情報を検索結果ページで条件分岐する用にします。

    トピック投稿者 wkkho

    (@wkkho)

    お返事ありがとうございます。
    教えていただいた方法を試してみます。

    デザインを変えたいというのは、グループ施設の各ブログをカテゴリ分けで作成しており、
    サーチ結果のデザインもグループ施設の各ホームページに合わせたいと思っています。
    (サーチは各カテゴリ内の記事のみを検索するようにしています)

    カテゴリ、アーカイブ、シングルページは成功していますが、サーチだけがうまくいかなかったのです。前にご指摘いただいた通り、カテゴリ1に記事がない場合にカテゴリ1指定しているテンプレートが反映されなかったようです。
    記事がない場合は、デフォルトにしているsearch-others.phpのデザインで表示されました。

    とりあえず、テストを繰り返して頑張ろうと思います。
    いろいろ知ることが出来てとても助かりました。
    最初につまづいた方が、すんなり成功するより勉強になりますね!
    おかげで構造がつかめてきました(なんとなくではありますが)。
    ご親切に教えていただき、本当にありがとうございました。

    モデレーター gatespace

    (@gatespace)

    こんばんは。

    デザインを変えたいというのは、グループ施設の各ブログをカテゴリ分けで作成しており、
    サーチ結果のデザインもグループ施設の各ホームページに合わせたいと思っています。
    (サーチは各カテゴリ内の記事のみを検索するようにしています)

    やりたい事の前提として、上記のような条件があるなら
    最初に提示したもらった方が回答をつけやすいです。
    (カテゴリ内の記事のみを検索しているのなら、使っているプラグイン名もあるとなお良しです)

    ※個人的にですが、「グループ施設の各ブログをカテゴリ分けで作成し」「そのカテゴリーごとにデザインも変える」という運用をするのであれば、いつのWordPressで複数のブログを管理できるマルチサイトの方がスムーズだったかもしれません。

    トピック投稿者 wkkho

    (@wkkho)

    お返事ありがとうございます。
    最初の説明がまずくてすいませんでした。

    使用しているテンプレートwpVicunaにはget_template_part( ‘content’, get_post_format() );がなかったので、最初の
    <?php
    $post = $wp_query->post;
    if ( in_category(‘1’) ) {
    include(TEMPLATEPATH . ‘/search-××.php’);

    の書き方でいくことにしました。
    教えていただいたように、カテゴリに記事がない場合に問題があったとわかり、上記の書き方でなんとかできそうです。

    複数カテゴリを指定した場合、若いカテゴリを読み込んでしまうという問題も発生したので、複数カテゴリを指定せず、一つずつカテゴリ指定したことで、サーチもカテゴリ別によんでくれるようです。

    マルチサイトに関しては、考えたのですが、
    ・バージョンアップすると動かないプラグインがあった
    ・wpトップにカテゴリすべてのニュースを表示させたかった
    ・投稿は1回にしたかった
    (各施設の人間がそれぞれ投稿し、それがトップにまとめて表示される)
    ということでしたので、マルチサイトにしませんでした。
    プラグインもひとつにまとめたかったこともあります。
    ↑マルチサイトでも同じようなことができるのでしたら申し訳ありません。
     まだまだそこまで調べていませんでした。

    ここまでWPをいじったのは初めてで、phpもだんだんと頭に入ってきました。
    ほんとうに細かく教えていただいてありがとうございました。
    「wordpress 絞り込み」で検索し、もっと勉強して頑張ります。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「カテゴリ別に検索結果デザインを変えたい」には新たに返信することはできません。