検索 の 対象 を いろいろ 変えてみる
この記事は 2015年 8月 29日 に書かれた記事です。
この記事は WordPress Version 4.3 の時の記事です。
ワードプレス の 検索対象を 投稿 かつ 数字のみ かつ タイトルのみ かつ 完全一致 に する必要があったので 調べてみました!!
まずは 検索対象を 投稿のみ に したい場合です
これは 結構 使用頻度 が 高いかな?? って 思います
//--------------------------------------------------------------------------- // クエリ処理 // 検索対象 は 投稿のみ //--------------------------------------------------------------------------- add_action( 'pre_get_posts', function ( $query ) { if( ! $query->is_admin && $query->is_main_query() ) { if( $query->is_search ) { // 検索対象を 投稿のみに $query->set( 'post_type', array( 'post' ) ); } } } );
こんな感じで 検索対象 が 投稿 のみ に なります
他に 検索結果ページでは 1ページに表示する最大投稿数 を 無制限にしたい場合 は
// 1ページに表示する最大投稿数 無制限 $query->set( 'posts_per_page', -1 );
を 追記してあげる って 感じです
次に 検索ワード を 数字のみに 変換します
まずは 文字列から 数字のみになる関数を 作ってしまいます
//--------------------------------------------------------------------------- // 数字のみ取得 //--------------------------------------------------------------------------- if( !function_exists( 'onlyNumbers' ) ) { function onlyNumbers( $val ) { // 半角数字 変換 $return = mb_convert_kana( $val, 'n', 'utf-8' ); // 半角数字以外除去 $return = mb_ereg_replace( '[^0-9]', '', $return ); return $return; } }
こんな感じ!!
型は 調べてないので エラー処理は 各々 やってくださいな…
で 次に 検索文字列を 先ほどの 関数を通して 元に戻してあげれば OK!!
場所は さっきと同じ所に 追記する
//--------------------------------------------------------------------------- // クエリ処理 // 検索対象 は 投稿のみ // 検索文字 を 変換 //--------------------------------------------------------------------------- add_action( 'pre_get_posts', function ( $query ) { if( ! $query->is_admin && $query->is_main_query() ) { if( $query->is_search ) { // 検索対象を 投稿のみに $query->set( 'post_type', array( 'post' ) ); // 1ページに表示する最大投稿数 無制限 $query->set( 'posts_per_page', -1 ); // 検索文字列を更新 $s = $query->get( 's' ); $s = onlyNumbers( $s ); $query->set( 's', $s ); } } } );
最後に タイトルのみ 完全一致 の 検索結果 に します
//--------------------------------------------------------------------------- // 検索対象 タイトルのみ 完全一致 //--------------------------------------------------------------------------- add_filter( 'posts_search', function ( $search ) { // タイトルのみ $search = preg_replace( "/ OR \([^\(\.]+.post_content LIKE '%.+%'\)/u", "", $search ); // ワイルドカード除去 $search = str_replace( '%', '', $search ); return $search; } );
これで 検索結果 を 検索対象を 投稿 かつ 数字のみ かつ タイトルのみ かつ 完全一致 に できました!!
I referred to WordPress Codex 日本語版.
http://wpdocs.osdn.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7/pre_get_posts#.E6.A4.9C.E7.B4.A2.E7.B5.90.E6.9E.9C.E3.81.8B.E3.82.89.E5.9B.BA.E5.AE.9A.E3.83.9A.E3.83.BC.E3.82.B8.E3.82.92.E9.99.A4.E5.A4.96
I referred to WordPress私的マニュアル.
http://elearn.jp/wpman/column/c20140403_01.html