Help us understand the problem. What is going on with this article?

ワードプレスのwhile(have_posts())について色々。forー>初心者

More than 5 years have passed since last update.

備忘録 兼 知らない人用。
ちょっとドツボにはまったので。

その1:各種記事ページでループしたい。

どゆこと?

各記事ページで

if (have_posts()) :    
    while (have_posts()) : the_post();
        //ループさせたい処理
    endwhile;
else:
    //記事がない場合の処理
endif;

なんてループ処理を使おうとすると残念ながら一度しか回りません。

各種記事ページでループした際に取得できるのは記事ページで見ている記事のものだけのようですね。

それでも俺は、ループしたい。

そんな人のためにWP_Query()とquery_posts()いう物とがあります。
後者は現在推奨されていない記述のようですが、一応書いておきます。

これらを使うことでカテゴリー別とか、タグ別とかに記事を取得するのにループの前に記述したりするものです。勿論全ての記事を取ってくることも出来るんですね。助かる!

※解決方法1

$args = array(
    'posts_per_page' => -1//すべての記事を取得することにする
);
$the_query = new WP_Query( $args ); 
    if ( $the_query->have_posts() ) :
        while ( $the_query->have_posts() ) : $the_query->the_post();
    //ループさせたい処理
    endwhile;
else:
    //記事がない場合の処理
endif;

※推奨されない解決方法2

query_posts('posts_per_page=-1');//全部の記事を取得することにする。
if (have_posts()) :    
    while (have_posts()) : the_post();
        //ループさせたい処理
    endwhile;
else:
    //記事がない場合の処理
endif;
wp_reset_query();//全ての記事を取得していたことをリセット

その2:ループ中にブレイクして二度目のループもブレイク

おまえは何を言っているんだ。

人によってはオリジナルでウィジェットのような動きをするテーマをコーディングする人も、きっといますよね。

そんな時に、記事を10だけ表示して終わりにしたい考えていた無知な私は

if (have_posts()) : 
    $i = 1;
    while (have_posts()) : the_post();
        //ループさせたい処理
        if($i==10)break;
        $i++;
    endwhile;
else:
    //記事がない場合の処理
endif;

という感じに記述した後に、同じ処理でループ処理の内容を変えてもう一度ループ仕様としたのですが、条件に合致しているはずの一度目のループで抽出した記事が二度目のループで取り出せない!!

そんな罠にハマりました。(仕掛けたのは自分ですが)

解決方法

きちんとループを最後まで回しましょう。そうするとhave_posts()さんはしっかり最初からループを回してくれるようになります。

if (have_posts()) : 
    $i = 1;
    while (have_posts()) : the_post();
        if($i <=10 && 条件2){
            //ループさせたい処理
            $i++;
        }
    endwhile;
else:
    //記事がない場合の処理
endif;

個人的には該当する記事を10見つけたら終わりにするっていう記述をしたかったのでこんな感じになりました。

参考になれば幸いですm(_ _)m

mmusasabi
(*´д`*)パッション!!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away