ページ内検索でタグやカテゴリーも検索範囲を広げる

  • PHP
  • WordPressのページ内検索フォームは、デフォルトでは、タイトルと、内容のみで、タグやカテゴリー、タクソノミーは、検索対象に含まれません。

    今回は、ページ内検索でタグやカテゴリーも検索範囲を広げる方法を紹介します。

    コード

    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}'
                /*タグ名・カテゴリ名を検索対象に含める記述 start*/
                            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}'
                            )
              /*タグ名・カテゴリ名を検索対象に含める記述 end*/
                    ) ";
                }
            }
        }
     
        return $search;
    }
    add_filter('posts_search','custom_search', 10, 2);

    以上で今回の説明は終了です。デフォルトでは検索範囲が狭く、思った検索結果が出ないので、タグやカテゴリーを使用して、理想の検索結果になるようにすると便利です。

    RECOMMEND

    CONTACT

    Webサイト作成は、是非
    CXG DESIGNへご検討ください。