いうえおかき

「offsetプロパティとページャが同時に使えない!」時の対処法(ワードプレス)

プラグインを使わずに、ページネーションをつけてみました。

function.phpに追加。

まずは、下記サイトを参考にページャーを生成する関数をfunction.phpに記述。
WordPressでページャー(ページネーション)をプラグインなしで実装

その後、自分はWP_Queryによるサブループで使用していたのと、表示数やカスタム投稿など、細かく設定がしたかったのでサイト内にあった「WP_Queryによるサブループで使用する場合」を改良し、argsプロパティを使えるように下記のように変更しました。


//$argsのプロパティを変えていく
$paged = get_query_var(’paged’) ?: 1;
$args = array(
    ’post_type’ =>array(’wordpress’,’post’),
    ’posts_per_page’ => 5,
    ’no_found_rows’ => false,  //ページャーを使う時はfalseに。
    ’paged’ => get_query_var(’paged’) ,
 );

$the_query = new WP_Query($args);
if ($the_query->have_posts()) :
  while ($the_query->have_posts()) : $the_query->the_post();?>

  ★処理内容★

    max_num_pages, $paged );
endif;

wp_reset_postdata();

offsetとページャーは同時に使えない!

ちなみに投稿をどの投稿から表示するようにするかはargsでoffsetプロパティを使うと制御できます。

’offset’=> 1, 

上記の指定で、1つめの投稿(自分の場合は最新の投稿)を抜かして2つ目の投稿から表示
になります。

しかし!!なんとこのoffsetプロパティですが、ページャーと同時に使えないのです!!つまり、ページャーを使うならばこのプロパティは無意味なものになります。

回避策はいくつかあると思いますが、自分がしっくりきたのは最新の投稿だけ読み込まないように

$firstID = get_the_ID();
’post__not_in’ => array($firstID)
を使う方法です。


//$argsのプロパティを変えていく
$firstID = get_the_ID(); //投稿の最初の記事ID
$paged = get_query_var(’paged’) ?: 1;
$args = array(
    ’post_type’ =>array(’wordpress’,’post’),
    ’posts_per_page’ => 5,
    ’no_found_rows’ => false,  //ページャーを使う時はfalseに。
    ’paged’ => get_query_var(’paged’) ,
    ’post__not_in’ => array($firstID) //省きたい投稿IDを配列で指定
 );

$the_query = new WP_Query($args);
if ($the_query->have_posts()) :
  while ($the_query->have_posts()) : $the_query->the_post();?>

  ★処理内容★

    max_num_pages, $paged );
endif;

wp_reset_postdata();

こちらで最初の投稿記事を省き、かつページネーションが使えるようになります。

トップへ戻る