サポート » 使い方全般 » category.phpに投稿(post)とカスタム投稿(dog)の同じカテゴリーを表示した

  • 解決済 inon

    (@inon)


    いつもお世話になっております。
    表題の件ですがご指導頂けましたら幸いです。

    category.phpに投稿のカテゴリー記事一覧を表示したいのですが、下記コードで表示できません。

    色々と試してみたのですが解決できなかったためご教示頂けますよう何卒宜しくお願い致します。

    ・投稿タイプ→post、dog
    (dogはカスタム投稿タイプで作成し、dogのビルトイン分類はカテゴリーを選択しておりpostで利用しているカテゴリーと同一のものを利用しています。)

    <?php query_posts(array( 'post_type' => array( 'post', 'dog' ) ) . 'post_per_page=-1&' . $query_string); ?>
    
    <?php if(have_posts()):while(have_posts()): the_post(); ?>
    <?php echo  get_the_date('Y/m/d'); ?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php endwhile; endif; ?>

    上記コードの場合、投稿タイプ”post”のカテゴリー記事しか表示されませんでした。

    カスタム投稿タイプ”dog”の記事の同一カテゴリー記事を一緒に表示するにはどのようにすればよろしいでしょうか?

    何卒宜しくお願い致します。

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

    (@hissy)

    配列(array)形式とクエリストリング形式(aaa=bbb&ccc=ddd)をつなげることはできません。エラーにならないもんなんですね…

    <?php query_posts(array( 'post_type' => array( 'post', 'dog' ) ) . 'post_per_page=-1&' . $query_string); ?>

    ところで、query_postsをテーマのテンプレートに書くのではなく、pre_get_postsフィルターをテーマのfunctions.phpに書いたほうが良いでしょう。

    Codexのpre_get_postsページに「検索結果にカスタム投稿タイプを含める」のサンプルコードがあります。
    is_search()で検索結果に適用していますが、カテゴリーアーカイブに適用させるように変えれば目的を達することができるでしょう。

    トピック投稿者 inon

    (@inon)

    hissy様

    お世話になっております。
    ご回答頂き本当に有難うございます!

    <?php query_posts(array( 'post_type' => array( 'post', 'dog' ) ) . 'post_per_page=-1&' . $query_string); ?>
    
    <?php if(have_posts()):while(have_posts()): the_post(); ?>
    <?php echo  get_the_date('Y/m/d'); ?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php endwhile; endif; ?>

    で行ってみたのですが表示結果は変わらずでした。
    何か他に要因があるのでしょうか…

    トピック投稿者 inon

    (@inon)

    追記

    また、ご教示いただいたpre_get_postsフィルターも追加してみたのですが表示されませんでした。

    function search_filter($query) {
      if ( !is_admin() && $query->is_main_query() ) {
        if ($query->is_category) {
          $query->set('post_type', array( 'post', 'dogs' ) );
        }
      }
    }
    
    add_action('pre_get_posts','search_filter');
    モデレーター Takuro Hishikawa

    (@hissy)

    あなたのquery_postsの書き方は間違っています。配列と文字列をくっつけてはいけません。

    query_postsを書くとpre_get_postsでのフィルタリングを上書きしてしまうので、同時に書いてはいけません。

    トピック投稿者 inon

    (@inon)

    hissy様

    お忙しい中度々申し訳ございません。

    その後query_posts、pre_get_postsの記述についてサイトで調べてみたのですが上手く行きませんでした。

    表示させるにはどの様に記述すればよろしいでしょうか?

    大変恐縮ではございますがご教示いただけましたら幸いです。
    何卒宜しくお願い致します。

    モデレーター Takuro Hishikawa

    (@hissy)

    pre_get_postsの方の書き方は正しいと思います。query_postsとpre_get_postsを同時に使っていませんか?

    トピック投稿者 inon

    (@inon)

    本当に何度もすいません。

    function search_filter($query) {
      if ( !is_admin() && $query->is_main_query() ) {
        if ($query->is_category) {
          $query->set('post_type', array( 'post', 'dog' ) );
        }
      }
    }
    
    add_action('pre_get_posts','search_filter');

    をfunctions.phpに加え

    category.phpにはquery_postを外して

    <?php if(have_posts()):while(have_posts()): the_post(); ?>
    <?php echo  get_the_date('Y/m/d'); ?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

    のみ記載しました。

    しかしながら、カスタム投稿(dog)の記事は取得されませんでした。
    本当に何度も申し訳ございませんがご指導頂けますでしょうか。

    モデレーター Takuro Hishikawa

    (@hissy)

    上記コードをそのままコピペして試してみましたが問題なくカスタム投稿タイプ dog の記事もひっかかりました。dogという投稿タイプ名を間違えているのでは?

    トピック投稿者 inon

    (@inon)

    hissy様

    お忙しい中本当に何度も対応頂きありがとうございます!
    無事に表示することが出来ました!!

    例えば、category.phpではなく、archive.phpに同様の動きをさせる場合はfunctions.phpに

    function search_filter($query) {
      if ( !is_admin() && $query->is_main_query() ) {
        if ($query->is_archive) {
          $query->set('post_type', array( 'post', 'dog' ) );
        }
      }
    }
    add_action('pre_get_posts','search_filter');

    と加えればよろしいでしょうか。

    モデレーター Takuro Hishikawa

    (@hissy)

    その通りです。

    トピック投稿者 inon

    (@inon)

    hissy様

    ありがとうございます。
    しかしながらfunctions.phpに

    function search_filter($query) {
      if ( !is_admin() && $query->is_main_query() ) {
        if ($query->is_archive) {
          $query->set('post_type', array( 'post', 'dog' ) );
        }
      }
    }
    add_action('pre_get_posts','search_filter');

    を加えたところ、サーバーエラーとなってしましました。

    上記のコードの前に、

    function search_filter($query) {
      if ( !is_admin() && $query->is_main_query() ) {
        if ($query->is_category) {
          $query->set('post_type', array( 'post', 'dog' ) );
        }
      }
    }
    add_action('pre_get_posts','search_filter');

    があることが原因でしょうか?

    モデレーター Takuro Hishikawa

    (@hissy)

    同名の関数を2回宣言することはできません。PHPの基本について勉強してください。

    トピック投稿者 inon

    (@inon)

    hissy様

    ありがとうございます!
    ご指摘通り基本から考えて無事に表示することが出来ました!!

    何度も丁寧に対応して頂き本当に感謝しております、ありがとうございます。

13件の返信を表示中 - 1 - 13件目 (全13件中)
  • トピック「category.phpに投稿(post)とカスタム投稿(dog)の同じカテゴリーを表示した」には新たに返信することはできません。