検索 の 対象 を いろいろ 変えてみる
この記事は 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