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

検索対象は、基本的に「記事タイトル・記事本文・抜粋文」になっています。

できればそこにカスタムフィールドの内容まで含めたい。そのような時に、function.phpに記述する内容です。

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

function.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}'
                        )
                        OR {$wpdb->posts}.ID IN (
                            SELECT distinct p.post_id
                            FROM {$wpdb->postmeta} AS p
                            WHERE p.meta_value LIKE '{$search_word}'
                        )
                ) ";
            }
        }
    }
    return $search;
}
add_filter('posts_search','custom_search', 10, 2);

運営者:mick

知らない間に、コーダー歴20年…
職人気質で食いしん坊

CodeHeavenでは、サイト制作に役立ちそうな情報を、なるべくデモを作りつつ発信していきます。

このサイトについて

本サイトはアフィリエイト広告を利用しています。

カテゴリ一覧