BTC:--
ETH:--
BCH:--
XRP:--

WordPressのWP_Query(get_posts)でループした時のページネーションへのデータ引継ぎ方

WordPressのWP_Query(get_posts)でループした時のページネーションへのデータ引継ぎ方

WordPressでは、query_postsが非推奨となって、get_postsの利用が推奨されています。

get_postsに似ている関数にWP_Queryがあります。
どちらを利用したほうがよいのかは、取得できる内容によって使い分けが必要になります。

違いを簡単に説明すると、
・get_postsは、投稿記事のみ取得できる。
・WP_Queryは、投稿記事以外の関連データも取得できる(総ページ数など)。

それぞれ取得したデータをvar_dumpしてみるとわかりやすいです。
例:
$myposts = new WP_Query($args);
var_dump($myposts);
$myposts = get_posts($args);
var_dump($myposts);
※$argsは下記を参考に値設定が必要。

それぞれの関数の使い分けとしては、
・get_postsは、ページネーションが必要ないランキングトップ10など。
・WP_Queryは、ページネーションが必要あるページなど。

WP_Queryで独自ページネーションを使ったサンプルコード

記事ループの処理の部分は「WordPressで、WP_Query(get_posts)で記事一覧を表示する。」を参照

// 設定
// 取得、20記事
// 日付、ソート
// 日付、降順
// ポストタイプ、postやカスタム投稿タイプなど
$def['posts_per_page'] = 20;
$def['orderby'] = 'date';
$def['order'] = 'DESC';
$def['post_type'] = 'カスタム投稿など';	

$args = array(
  'paged' => $paged,//このパラメータを設定。現在のページを判定。2ページ以降で正しい記事を表示するため。
  'posts_per_page' => $def['posts_per_page'],
  'orderby' => $def['orderby'],
  'order' => $def['order'],
  'post_type' => $def['post_type'],
);

//ポストデータ取得
//WP_Queryでデータ取得すると総ページ数を取得できる。
//get_posts()だと取得できない・・・。
$myposts = new WP_Query($args);

//以下、取得したデータの処理
if($myposts->have_posts()) {

  //記事のループ処理whileにあたる部分
  foreach($myposts->posts as $post){
    //$post->ID
    //でポストIDが取得できます。
    //カスタムフィールドを取得したい場合
    //get_post_meta($post->ID, 'カスタムフィールド名', true);
  }

  //ページネーション
  if (function_exists("pagination")) {
    $max_page = $myposts->max_num_pages;  //WP_Queryでデータ取得すると総ページ数を取得できる。
    pagination($max_page);  //ページネーションのfunction(関数)
  }
}

wp_reset_query();

ページネーションのfunction(関数)とCSSは下記のサイトのものを利用すれば完成です。
https://wemo.tech/978

ポイントは、
$argsに設定している現在ページを取得する’paged’ => $paged,
これによって、2ページ目以降のページをクリックした場合に、正しい記事が表示できます。これがないと、ずっと1ページ目が表示されてしまいます。

WP_Queryでデータ取得すること
これによって、ページネーションで必要な総ページ数を簡単に取得できます。

また、get_postsだとよくある下記の方法でも総ページ数を取得できません。
global $wp_query;
$max_page = $wp_query->max_num_pages;
Close Menu