23
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WP_Queryでページネーションがうまくいかなくて対応したこと

Last updated at Posted at 2014-08-25

※この記事は2014年8月作成で、WPバージョン3.7.1とかそのくらいの頃の話になりますのでご注意ください。

--

こういうやつ.png

WP_Queryを使って固定ページで特定のカテゴリとか投稿タイプとかの一覧をとって、それをページングさせようとしたときにわりとすんなり言ってくれなかったメモ。

$queryとか$max_num_pageとかがうまくglobalのやつに入ってくれないっていうのが問題っぽかった。

※'/hoge'が1ページ目であるということがわかっている前提に作られています。

<?php

global $post; // これは取れる
global $paged; // これも取れる
global $max_num_page; // これが取れない

$list = new WP_Query("category_name=hoge&paged=$paged");
$max_num_pages = $list->max_num_pages; // これで取れる

if($list->have_posts()): while($list->have_posts()): $list->the_post();
	// ループ処理
endwhile;

// ループのあとにページネーション
?>

<nav>
<?php if($paged > 1): //最初のページと前のページ ?>
	<a class='page' href="/hoge/">&laquo;</a>
	<a class='page' href="/hoge/page/<?php echo($paged - 1) ?>">&lt;</a>
<?php endif; ?>
<?php for($i = 1; $i <= $max_num_pages; $i++): // 各ページ ?>
<?php
	if($i == $paged){
		echo "<span class='page current'>$i</span>";
	} else {
		if($i == 1) echo "<a class='page' href='/hoge/'>1</a>";
		else echo "<a class='page' href='/hoge/page/$i'>$i</a>";
	}
?>
<?php endfor; ?>
<?php if($paged < $max_num_pages): // 次のページと最後のページ ?>
	<a class='page' href="/hoge/page/<?php echo $paged + 1 ?>">&gt;</a>
	<a class='page' href="/hoge/page/<?php echo $max_num_pages ?>">&raquo;</a>
<?php endif; ?>
</nav>

<?php
	endif; wp_reset_query();
?>

クラスとスタイルはまぁ適宜。
ただしこれだと全ページが出ちゃいますので注意してください。

時間なかったのでパパッとやっちゃったけど、functions.phpに入れられるような形にしてもよかった。

23
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?