ワードプレスのWP_QueryのSQL文にWHEREを追加するにはadd_filter関数を利用します。


ワードプレスのWP_QueryのSQL文にWHEREを追加するadd_filter関数

add_filter はワードプレスの処理に割り込んで様々な値を加工したり置き換えたりする関数です。
ワードプレスのWP_Queryのときに実行されるSQL文にWHEREを追加するにはposts_whereでadd_filter関数を利用します。

add_filter("posts_where", "WHEREを追加する関数名");
//この間で実行されるWP_Queryにadd_filterが適応されます
remove_filter("posts_where", "WHEREを追加する関数名");//フィルタの削除

検索に必ず特定の投稿IDを含むようにする

WP_QueryのSQL文にWHEREを追加するadd_filter関数を利用して検索結果に必ず特定のIDの投稿を含むようにするサンプルコードは下記のようになします。

WP_Queryを実施するプログラム
add_filter("posts_where", "add_where_function");
$result = new WP_Query($arg); //任意のWP_Query
remove_filter("posts_where", "add_where_function");//フィルタの削除
fcuntions.phpにadd_where_functionを定義します
function add_where_function( $where ) {
    if ( ! is_admin() ) { //①
        global $wpdb; //②
        $where . = " OR $wpdb->posts.ID = '1' "; //③
    }
    return $where;
}

①管理画面でない場合
②$wpdbからプレフィックスを取得するためにグローバル変数を呼び出します
③WHEREにOR文を追加しID 1 の投稿を必ず含むようにします。

WordPress ワードプレスの検索のカスタマイズや修正のご依頼・ご相談はWPドクターまでお気軽にお送りください