サポート » 使い方全般 » WP_Queryで先頭固定指定後、次のWP_Queryがデータを引きずってしまう

  • 解決済 yoshik

    (@yoshik)


    固定ページで本文内にPHPを有効化させたWordPressでの話です。
    WP_Queryで次の引数で一覧取得させ、再度WP_Queryで引数を指定すると前のデータを引きずっておりました。

    現象としては以下の通りです。
    WP_Queryで

    $my_query = new WP_Query( array( 'cat' => 65, //カテゴリID指定
    	 'posts_per_page' => '5',//表示する記事数指定
    	 'orderby' => 'date',//日付でソート
    	 'order' => 'DESC',//新しい順に並び替え
    	 'post__in'  => get_option('sticky_posts')//先頭固定を対象とする
    	  ));

    先頭固定+所得件数5件制限+カテゴリ限定1個+日付でソート

    を一覧取得させる。
    (正常取得)

    次に先頭固定+所得件数5件+先のカテゴリは除く全てのカテゴリ+日付でソート
    と指定してWP_Queryで

    $my_query = new WP_Query( array( 'category__not_in' => array('65'),
    	 'posts_per_page' => '5',//表示する記事数指定
    	 'orderby' => 'date',//日付でソート
    	 'order' => 'DESC',//新しい順に並び替え
    	 'post__in'  => get_option('sticky_posts')//先頭固定を対象とする
    	  ));

    取得処理を行うと

    全カテゴリ先頭固定8件+日付でソート

    と表示されました。
    先頭固定したのが8件だったので全部持ってきています。

    二番目の処理をWP_Queryではなくquery_postsで試しましたが
    query_posts($query_string . '&cat=-65showposts=5&ignore_sticky_posts=0'); ?>

    同じように除去カテゴリを取得しました。

    WP_Queryのリセットがきいて無いのだと思い

    wp_reset_query();
    wp_reset_postdata();

    をかきつらねましたが効果はない状況です。
    解決方法を教えて頂ければ幸いです。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • 自己解決致しました。
    データがとれていないのではなく取れすぎて困っているので
    要らないデータはすっ飛ばす方向に方針転換してみました。

    while( have_posts() ) :
    the_post();
    if (!in_category('65')){
    echo '<h2><a href="';
    echo the_permalink();
    echo '"<'. get_the_title().'</a></h2>';
    echo the_content('read more...');
    }
    endwhile;

    のように「!in_category(’65’)」と指定すればいらないカテゴリ以外を表示する事が可能です。
    もっと綺麗な対処の方法があればいいのですが・・・。

    おすすめの方法がありましたらお知らせ頂けると幸いです。

    同じファイル内で違うループを2つ使うのですよね?
    2つ目の $my_query の前に、rewind_posts(); を入れても変わりませんでしょうか。

    > ひじりさま
    ご回答頂きありがとうございます。

    検証してみましたがダメでした。

    ちなみにWP_Queryは計5回使っています。
    それぞれのループに「wp_reset_query();」を入れています。

    4回目に先頭固定を指定した指定カテゴリのループを表示し
    5回目で先頭固定を指定したカテゴリ除外のループを回しております。

    5回目だけが4回目のデータを引き継いでいるというか
    引数を無視して動いている状況です。

    > 次に先頭固定+所得件数5件+先のカテゴリは除く全てのカテゴリ+日付でソート

    page-text.php を作成したページの中ですが、この条件のみで回してみたのですが、
    「引き継いでいる」というより
    「先頭固定を対象にするとカテゴリ除去が機能しない」というような状況ですね。
    先頭固定記事は強制的に表示されます。

    $arg = array(
    	'cat' => -3,
    	'posts_per_page' => 5,	//表示する記事数指定
    );
    $the_query = new WP_Query( $arg );

    → 結果:先頭固定>カテゴリ3以外 で表示

    というわけで、強制を無効にする方法で実現できました。これでいかがでしょうか?

    $arg = array(
    	'cat' => -3,
    	'posts_per_page' => 5,//表示する記事数指定
    	'post__in'  => get_option('sticky_posts'),	//先頭固定を対象とする
    	'ignore_sticky_posts'  => 1,	//先頭固定を無効にする
    );

    → 結果:カテゴリ3以外の先頭固定表示記事 を表示

    参考:”この投稿を先頭に固定表示”とquery_posts() | firegoby http://firegoby.jp/archives/2536
    # いつも参考になります

    ありがとうございます。
    無事思った通りの動きをしてくれました。

    それにしてもこんな設定でいいとは思いつきませんでした。
    いい勉強になりました。

    解決にします

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「WP_Queryで先頭固定指定後、次のWP_Queryがデータを引きずってしまう」には新たに返信することはできません。