WordPressの標準でのサイト内検索では、『投稿ページ』と『固定ページ』のタイトルと本文、抜粋が検索対象になっているため、カテゴリーなどは検索の対象ではありません。そこで、こちらでは、検索範囲を カテゴリー名、タグ名と広げる方法の備忘録になります。
functions.phpに以下のものをする
/**
* サイト内検索の範囲に、カテゴリー名、タグ名、を含める
*/
function custom_search($search, $wp_query) {
global $wpdb;
//サーチページ以外だったら終了
if (!$wp_query->is_search)
return $search;
if (!isset($wp_query->query_vars))
return $search;
// タグ名・カテゴリ名も検索対象に
$search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : '');
if ( count($search_words) > 0 ) {
$search = '';
foreach ( $search_words as $word ) {
if ( !empty($word) ) {
$search_word = $wpdb->escape("%{$word}%");
$search .= " AND (
{$wpdb->posts}.post_title LIKE '{$search_word}'
OR {$wpdb->posts}.post_content LIKE '{$search_word}'
OR {$wpdb->posts}.ID IN (
SELECT distinct r.object_id
FROM {$wpdb->term_relationships} AS r
INNER JOIN {$wpdb->term_taxonomy} AS tt ON r.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN {$wpdb->terms} AS t ON tt.term_id = t.term_id
WHERE t.name LIKE '{$search_word}'
OR t.slug LIKE '{$search_word}'
OR tt.description LIKE '{$search_word}'
)
) ";
}
}
}
return $search;
}
add_filter('posts_search','custom_search', 10, 2);
pre_get_posts で 検索結果のクエリーをカスタマイズ
//pre_get_posts で 検索結果のクエリーに条件を追加
function change_posts_paging($query) {
// 管理画面やメインクエリーでない場合は除外
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
// 検索結果ページ
if ( $query->is_search() ) {
// 公開されてる記事のみ検索
$query->set( 'post_status', 'publish' );
// 投稿のみ検索
$query->set( 'post_type', 'post' );
// 表示したくないカテゴリーID
$query->set( 'category__not_in', 1 );
// 表示したくない投稿ID。arrayで複数指定可。
$query->set( 'post__not_in', array( 1, 2, 3, 4, 5 ) );
// 検索結果の表示順
$query->set( 'order', 'DESC' );
return;
}
}
add_action( 'pre_get_posts', 'change_posts_paging' );
//投稿タイプを追加する場合は、array 型で記述します。
//カスタムポストタイプ(ex. music )を含む場合もここに追加します。
//$query->set( 'post_type', array( 'post', 'page', 'music' ) );
参考
WordPress のサイト内検索をプラグインなしでカスタマイズする方法 - デザイナーのタネあかしサイト内検索を拡張してくれる有名プラグインもあるのですが、今回は functions.php に記述して検索条件をカスタマイズする方法をご紹介します。pre_get_postsでメインクエリを制御する | Tips Note by TAMTAM のテクニカルチームがお届けする WEB技術ブログ!https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query
検索の結果で、警告が出た場合
参考 : https://www.wp-master.club/warning-use-of-undefined-constant