WP_Queryが発行するSQLを、フィルターフックposts_requestで変更

WordPressの投稿やメタデータを検索する WP_Query クラスはとても強力です。meta_query や tax_query と組み合わせることで、ほとんどすべての情報を自在に取得することができます。しかし、時にはSQLを自ら書かないとデータを取得できない、難しい場面に出会うことがあります。

そんなときに役立つのが、フィルターフック posts_request です。SQLを直接書き換えて、WP_Queryをさらにパワーアップさせることができます。

基本的な使い方は、以下のようになります。

WP_Queryが発行するSQLを $query で受け取り、var_dump()で確認した上で、SQL文の一部を書き換えています。ちなみにSQL文の全体を取得するフックは posts_request ですが、他にもWHERE句だけを取得する posts_where や、GROUP BY句を取得する posts_groupby などのフックも用意されています。詳しい情報はCodexのカスタムクエリを参照してください。

たとえばカスタムテーブルを使うプラグイン等の場合には $wpdb で一からSQLを組み立てるほうが便利な場合もあります。ちょこっと手が届かない部分の書き換えは posts_request フック、本格的にSQLを書くなら $wpdb を使う、という使い分けをすると良さそうです。

株式会社トンボロはWordPress専門のウェブ制作会社です。

WordPressサイトの制作や、カスタマイズを承ります。
お見積りは無料です。お気軽にお問い合わせください。