検索対象に固定ページやカスタム投稿を含める
- 逆に
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' );