12. 11月 2012 · [WP] posts_nav_link が WP_Query のループで動作しない理由と解決策とスニペット はコメントを受け付けていません。 · Categories: WEB制作 · Tags: , ,

Wordpress Button Closeup

結論から言っちゃうよ

  • new WP_Query でクエリを新しく作ったものには posts_nav_link が使えない
  • posts_nav_link(前後記事へのリンクを張る)を使いたい場合は query_posts を使おう
  • new WP_Query を使いたい場合は WP-PageNavi を使ってページングしてしまおう

なぜ posts_nav_link が使えないのか

参考:get_posts_nav_link (WordPress Function) – WPSeek.com

ソースを見たら一目瞭然でした。global $wp_query; として、大元のクエリをベースにしているためです。新しく作ったクエリを引数で渡せないかなと思いましたが、そのままでは無理そうですね。

その点、query_posts はメインのクエリ($wp_query)を変更するので posts_nav_link を使えるというわけです。

WP_Query × WP-PageNavi

WP-PageNavi は 1,2,3… と番号でページングしてくれるプラグインです。これにはクエリを渡せるので、下記のように使えます。

最後は wp_reset_postdata(); で締めましょう。新しく作ったクエリを消して元に戻す、というイメージで。

query_posts × posts_nav_link

posts_nav_link もループ外で使用します。

最後は wp_reset_query(); で締めましょう。元のクエリに戻す、というイメージで。

今回は結果的に、WP_PageNavi を入れたほうがスッキリしたのでプラグイン採用しましたよ。


Comments closed