WordPressのカスタマイズでquery_postsを使用する際の注意点

WordPressのカスタマイズでquery_postsを使用する際の注意点を記録しておきます。

というのも、query_postsの仕様を把握していない箇所で意図しない動きをした為です。

スポンサーリンク

意図しない動き

何が起きたかと言うと、query_postsをfunction.phpに記載してショートコードでフロントページから呼び出しました。呼び出したところまでは良かったのですが、呼び出し元の記事の後ろにquery_postsでループさせた記事の本文が表示されてしまいました。

query_postsの何かが残ってしまったようです。

これを解消するにはquery_postsを使用した後にwp_reset_queryをしないといけなかったようです。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_reset_query

そもそも、「query_posts() はメインクエリを置き換えてしまうため、利用は推奨されません。どうしても必要な場合にのみ使うようにしてください」と記載がありました。

本来別のクエリを使用する場合はWP_Queryを使用しないといけなかったようです。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query

表示件数の指定

また、別件ですがクエリの件数は「設定」画面でデフォルト設定にしてある件数が反映されるようです。件数を自分で指定したい場合は引数posts_per_pageに値を設定する必要がありました。全件の場合は-1でした。

https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts

まとめ

クエリを使用する場合はWP_Queryを使用する。

どうしてもquery_postsを使用する場合はwp_reset_queryをする。

件数の指定はposts_per_page

全件は-1