WordPressで先頭固定記事が複数(重複して、ダブって)表示される場合の対処法
この記事では、
「WordPressで先頭固定記事が複数(重複して、ダブって)表示される場合の対処法」
を紹介致します。
答え:'post__not_in' => get_option('sticky_posts'),を追記する
どこに、'post__not_in' => get_option('sticky_posts'),を追記するかというと、上記記事で紹介した私のコードの「先頭固定記事以外の記事」を出力している処理にある、'ignore_sticky_posts' => 1,の直後です。
具体的なコードは、以下の通りです。
<?php
$list_cnt = 4; //表示させたい件数
$sticky = get_option('sticky_posts'); //先頭固定の記事
if ( !empty($sticky) ) $list_cnt -= count($sticky); //もし先頭固定の記事があったら、その件数を「$list_cnt」の値から引く
if ( count($sticky) > 0 ):
$the_query = new WP_Query(array(
'posts_per_page'=>4,
'post__in' => $sticky,
));?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<div>
繰り返したい処理
</div>
<?php endwhile; ?>
<?php endif; ?>
<?php if ( $list_cnt > 0 ):
$the_query = new WP_Query(array(
'posts_per_page' => $list_cnt,
'ignore_sticky_posts' => 1,
'post__not_in' => get_option('sticky_posts'),
));?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<div>
繰り返したい処理
</div>
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>
'ignore_sticky_posts' => 1,の直後に、'post__not_in' => get_option('sticky_posts'),を追記すると、先頭固定記事が「先頭固定記事以外の記事」を出力している処理から除外され、ダブって2つ表示されていた先頭固定記事が、1つだけ先頭固定表示されるようになります。
以前紹介した私のコードでは、上記のコードが抜けていました。
つまり、以前紹介した私のコードには不備があったということです!
すいませんでした!
さきほど、お客さんから「なんか、先頭固定した記事が2つ表示されてしまうんですけど、、」という問い合わせがあり、急遽ググりまくって対処したのでした。。
ググって見つけた下記の記事がとても参考になりました。
どうもありがとうございましたm(_ _)m
'ignore_sticky_posts' => 1,という記述で、重複が起きるのを回避できていると思っていたのですが、これだけでは駄目(あるいはこの記述は機能していない?)ということのようです。
追記:上記コードでは、先頭固定した記事を下書きに戻すと、表紙に表示されている記事の数が減ってしまいます(先頭固定の設定が生きており、表示される記事数に影響を与えてしまうため)。記事を下書きに戻す際は、記事の先頭固定記事の設定を、解除するようにして下さい。