WordPress サイト内検索のカスタマイズ

検索対象に固定ページやカスタム投稿を含める

  • 逆に post_type を特定することで、検索対象とする投稿タイプを限定することもできる
// サイト内検索に固定ページやカスタム投稿を含める - - - - - - - - - - - - - - - - - - - - - - */
function SearchFilter($query) {
  if ($query->is_search) {
    $query->set('post_type', array('page', 'post', 'custom_posts'));
  }
return $query;
}
add_filter('pre_get_posts','SearchFilter');

検索対象にカスタムフィールドを含める

// サイト内検索対象にカスタムフィールドを含める - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
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 = '%' . esc_sql( $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 post_id
                FROM {$wpdb->postmeta}
                WHERE meta_value LIKE '{$search_word}'
                )
              ) ";

          }
      }
  }
  return $search;
}
add_filter('posts_search','custom_search', 10, 2);

サイト内検索の対象を特定のカスタムフィールドに限定する

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 = '';
        $search .= "AND post_type = 'post'";
        foreach ( $search_words as $word ) {
            if ( !empty($word) ) {
                $search_word = '%' . esc_sql( $word ) . '%';
                $search .= " AND (
                    {$wpdb->posts}.post_title LIKE '{$search_word}'
                    OR {$wpdb->posts}.ID IN (
                        SELECT distinct post_id
                        FROM {$wpdb->postmeta}
                        WHERE {$wpdb->postmeta}.meta_key IN ('カスタムフィールド1', 'カスタムフィールド2') AND meta_value LIKE '{$search_word}'
                    )
                ) ";
            }
        }
    }
    return $search;
}
add_filter('posts_search','custom_search', 10, 2);

Kazunori Miura — WordPressの検索対象を特定のカスタムフィールドの値に限定する

特定ページを検索結果から除外

// 特定ページを検索結果から除外 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
function search_pre_get_posts( $query ) {
if ( $query->is_search && !is_admin() ){
$query->set( 'post__not_in', array(3,119,120) ); # post_id を指定
}
return $query;
}
add_action( 'pre_get_posts', 'search_pre_get_posts' );