【WordPressの「query_posts」や「WP_Query」で「この投稿を先頭に固定表示」にチェックしてある投稿を除外して取得する】

ちょっと細かいことなんですが、そういえばうっかり忘れていたのでメモ程度で・・・WordPressで、好きな場所に好きな条件で最新の投稿を表示する方法で、「query_posts」「WP_Query」を利用する方もいらっしゃると思います。

ものすごくシンプルな使い方ですと、こんな感じです。

【「query_posts」を使って、最新の投稿を5件取得してリンク付きタイトル表示】

<ul>
<?php query_posts('posts_per_page=5'); ?>
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 <li><a href="<?php the_permalink(); ?>"><?php the_title();?></a></li>
<?php endwhile; endif; wp_reset_query(); ?>
</ul>

よくあるパターンで、htmlタグ「ul,li」を使ってリストで表示するやつです。それで、表示されるのはいいんですが「『この投稿を先頭に固定表示』にチェックをつけた投稿」も取得されます。

ここです、ここにチェックを入れた投稿が取得されます

例えば古い投稿にこのチェックをつけていると、古い投稿が最新の投稿に混ざってしまいます。それはちょっとな~・・・ということもあります。

ですので、パラメーターで「『この投稿を先頭に固定表示』にチェックをつけた投稿」を除外して取得する方法があります。

「ignore_sticky_posts」を使う

「ignore_sticky_posts」のパラメーターを使い、値を設定します。

例えばこんな感じです。

<ul>
<?php query_posts('posts_per_page=5&ignore_sticky_posts=1'); ?>
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 <li><a href="<?php the_permalink(); ?>"><?php the_title();?></a></li>
<?php endwhile; endif; wp_reset_query(); ?>
</ul>

上のコードに書いてある太字「&ignore_sticky_posts=1」を追加しました。

値は「1」で除外しますので、これでOKです。

「WP_Query」で「ignore_sticky_posts」を使う

同じことを「WP_Query」でやる場合は、例えばこちらでOKです。

<ul>
<?php $query = new WP_Query( array( 'ignore_sticky_posts' => 1, 'posts_per_page' => 5 ) ); ?>
 <?php if( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post(); ?>
 <li><a href="<?php the_permalink(); ?>"><?php the_title();?></a></li>
<?php endwhile; endif; ?>
</ul>

「query_posts」と取得結果は同じです。

同じですが「query_posts」と「WP_Query」の違いってのはもちろんありますので、また機会がありましたら。

著者:bouya Imamura