WordPress
wp
pagination
wp_query

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

※この記事は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に入れられるような形にしてもよかった。