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 を使う、という使い分けをすると良さそうです。