BLOG

WordPressで簡単なのにすぐ忘れちゃうやつ

| WordPress

WP_Queryでのwp-PageNaviでのページ送りがうまくいかない

WP_Queryquery_postsでの違いでの問題になるところだと思います。
query_postsはそのページのクエリを上書きをするのですが、WP_Queryは変数にぶち込むので、ページのクエリには影響しません。
なのでWP_Queryを使う時は変数を渡して上げないといけないといいうことになるのではないかと思います。

<?php
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$args = array(
  'paged' => $paged ,
  'posts_per_page' => 5
);
$the_query = new WP_Query($args);
if($the_query->have_posts()):
while($the_query->have_posts()) : $the_query->the_post();
?>
// 内容がはいります。
<?php
endwhile;
endif;
if(function_exists('wp_pagenavi')){
  wp_pagenavi(array('query'=>$the_query));
}
wp_reset_postdata();
?>

wp_pagenavi()のところが決めてとなります。
WP_Queryをぶち込んだ変数をぶち込んでやるとよいのです。

ページ送りが上手くいかない

うまくいかないのは、何ページ目かということが取得できていないのが、ほぼほぼ理由だと思います。
ってこと、下記のように取得してみてはどうだろうか。

<?php
// ページを取得
$paged = get_query_var('paged') ? get_query_var('paged') : 1;

// ページを設定
$args = array(
  'paged' => $paged ,
  'posts_per_page' => 5
);
$the_query = new WP_Query($args);
?>

$pagedの中身を確認してみて、ページ数が取得できてたら、完璧っすね。

query_stringを配列で指定する方法

query_stringを使う場合はこんな感じで指定することが多いですよね。

$args = array(query_string."&posts_per_page=5");

僕は、(自分的に)見やすくしたいので配列で使いたいのです。ってことでこんな感じで使えます。

parse_str( $query_string, $args );
$args['posts_per_page'] = 5;
$args['order'] = 'DESC';

この書き方は、僕にはあっていないので下記のように書いても使えます。

parse_str( $query_string, $args );
$args += array(
  'posts_per_page' => 5,
  'order' => 'DESC'
);

こっちのほうが配列として僕はわかりやすいというだけですが(´∀`)

まとめ

よく使うけども、忘れてしまうのを羅列してみましたが、これらは、完全に自分的なところですね。
でも、誰かの役に立てばいいなと思って書いてみました。