LoginSignup
23
19

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