目次
カスタム検索関数の理解
提供されたコードスニペットは、WordPressのデフォルトの検索機能を強化するために設計されたカスタム検索関数を示しています。その構成要素と機能について詳しく見ていきましょう。
目的
このカスタム検索関数の主な目的は、デフォルトの検索動作を拡張し、より細かい検索制御を可能にすることです。提供されたコードは、WordPressのposts_search
フィルターを使用して、検索クエリを変更およびカスタマイズします。
機能
条件の確認と修正: この関数は、
$wp_query
オブジェクトが検索であるかどうか、およびクエリ変数が設定されているかどうかを確認します。これにより、適切な条件下でのみカスタム検索を実行します。検索語の分割: 検索語をスペースで分割し、半角カタカナを全角カタカナに変換しています。
検索条件の構築: 各検索語に対して、
$wpdb
を使用してposts
テーブルのpost_title
やpost_content
などのカラムと結合して条件を作成します。また、タームの名前やスラッグ、説明にも検索条件を適用します。結合条件の作成: すべての検索語の条件を
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サイトの検索機能を強化し、ユーザーがより適切なコンテンツを見つけやすくなります。