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,という記述で、重複が起きるのを回避できていると思っていたのですが、これだけでは駄目(あるいはこの記述は機能していない?)ということのようです。

追記:上記コードでは、先頭固定した記事を下書きに戻すと、表紙に表示されている記事の数が減ってしまいます(先頭固定の設定が生きており、表示される記事数に影響を与えてしまうため)。記事を下書きに戻す際は、記事の先頭固定記事の設定を、解除するようにして下さい。