目次

    カスタム検索関数の理解

    提供されたコードスニペットは、WordPressのデフォルトの検索機能を強化するために設計されたカスタム検索関数を示しています。その構成要素と機能について詳しく見ていきましょう。

    目的

    このカスタム検索関数の主な目的は、デフォルトの検索動作を拡張し、より細かい検索制御を可能にすることです。提供されたコードは、WordPressのposts_searchフィルターを使用して、検索クエリを変更およびカスタマイズします。

    機能

    1. 条件の確認と修正: この関数は、$wp_queryオブジェクトが検索であるかどうか、およびクエリ変数が設定されているかどうかを確認します。これにより、適切な条件下でのみカスタム検索を実行します。

    2. 検索語の分割: 検索語をスペースで分割し、半角カタカナを全角カタカナに変換しています。

    3. 検索条件の構築: 各検索語に対して、$wpdbを使用してpostsテーブルのpost_titlepost_contentなどのカラムと結合して条件を作成します。また、タームの名前やスラッグ、説明にも検索条件を適用します。

    4. 結合条件の作成: すべての検索語の条件をANDおよびORで結合し、最終的な検索クエリを作成します。

    posts_searchフィルターへの適用

    このカスタム検索関数は、WordPressのposts_searchフィルターを使用して登録され、検索クエリの結果を修正およびカスタマイズします。

    実際のコード

    /* ---------- Add category for search filter and [AND] search ---------- */
    function custom_search($search, $wp_query) {
    global $wpdb;
    if (!$wp_query->is_search || !isset($wp_query->query_vars)) {
    return $search;
    }
    $search_string = str_replace(' ', ' ', $wp_query->query_vars['s']);
    $search_words = explode(' ', $search_string);
    if (count($search_words) > 0) {
    $search = ' AND (';
    $search_terms = []; foreach ($search_words as $word) {
    if (!empty($word)) {
    // 半角カタカナを全角カタカナに変換
    $word = mb_convert_kana($word, 'KV');
    $search_word = $wpdb->_escape("%{$word}%");
    $search_terms[] = "{$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}'
    )";
    }
    }
    $search .= implode(' OR ', $search_terms);
    $search .= ') ';
    }
    return $search;
    }
    add_filter('posts_search', 'custom_search', 10, 2);

    まとめ

    以上が、提供されたコードスニペットの機能と利用方法に関する詳細な説明です。これにより、WordPressサイトの検索機能を強化し、ユーザーがより適切なコンテンツを見つけやすくなります。

    PREV
    2023.12.11
    Vue.jsを使ってみる~製作編1~
    NEXT
    2024.01.04
    【元公務員が教える】公務員を薦めない理由