ウェベン!

【WP】2番目の投稿から一覧表示させる方法

ワードプレスの投稿一覧で、
1記事目だけピックアップのような感じで大きくレイアウトを変えて表示させて、2番目の記事以降をリストで表示させたいことがありました。

2記事目から表示させるのってどうやるんだ?と思い、調べたのでメモ。

2番目の投稿から表示する記述

<?php
$args = array(
	'posts_per_page' => 10,
	'offset' => 1,
);
$the_query = new WP_Query( $args );
?>
<?php if ( $the_query->have_posts() ) :
	while ( $the_query->have_posts() ) : $the_query->the_post();
?>
// 表示させたい内容
<?php
	endwhile;
endif;
?>

4行目「’offset’ = 1」を指定することで、1つずらして2番目の投稿から表示させることができます。
5番目の記事から表示させるのであれば「’offset’ = 4」

1番目の記事は、1件だけ表示で対応。

<?php
$args = array(
	'posts_per_page' => 1,
);
$the_query = new WP_Query( $args );
?>
<?php if ( $the_query->have_posts() ) :
	while ( $the_query->have_posts() ) : $the_query->the_post();
?>
//1記事目の表示させたい内容
<?php
	endwhile;
endif;
?>

ただし、ページングと一緒には使えない

‘offset’を使用すると、’paged’が無視されるようです。
また、’posts_per_page’=>-1(=すべての投稿を表示)を使用すると今度は’offset’が無視されるとのこと。

ページングがある投稿一覧で2番目の投稿から表示させる方法

いくつかやり方はあるみたいですが、個人的にfunctions.phpを行き来するのが面倒なので直接ループの流れに書いていくのが好きです。

// ここから1記事目のみを表示させる記述
<?php
$paged = get_query_var( 'paged', 1 ); //現在のページ番号を取得。(1ページ目の1記事目だけレイアウトを変えるため)
$post__not_in = []; //最新1件目の記事idを後で入れる

$first_args = array(
    'posts_per_page' => 1
);
$first_query = new WP_Query( $first_args );
if ( $first_query->have_posts() ) :
	while ( $first_query->have_posts() ) : $first_query->the_post();
	$post__not_in[] = $post->ID; //1記事目の記事idを取得。(後で1記事目を除外するため)
	if ($paged == 1) { //1ページ目だったら
?>
	// 1記事目の表示したい内容
<?php
	}
	endwhile;
endif;
?>

// ここから2記事目以降を表示するための記述
<?php
$the_args = array(
    'paged' => $paged,
    'post__not_in' => array($post__not_in), //1記事目を除外
    'posts_per_page' => 10
);
$the_query = new WP_Query( $the_args );
if ( $the_query->have_posts() ) :
	while ( $the_query->have_posts() ) : $the_query->the_post();
?>
    	//2記事目以降の表示したい内容
<?php
	endwhile;
?>
    	//ページャーの記述
<?php
	endif;
?>

基本的には応用で、ページングと両立させるためのポイントは3つ。

  • 2記事目以降を表示は、’offset’を使わずに’post__not_in’で1記事目を除外する方法にする。
  • 1記事目を除外するために、1記事目のidを取得しておく。
  • 1ページ目の1記事目だけレイアウトを変えるのでif ($paged == 1) で条件分岐。

これで解決♪

こちらは以下記事を参考にさせていただきました。
【WordPress】WP_Queryでpagedとoffsetが一緒に使えないけど、どうにかする