WPのサイト検索にカテゴリー名、タグ名、ユーザー名、カスタムフィールドを含める方法

WordPressについている検索機能の検索対象は記事の「タイトル」と「投稿」の内容だけになっています。
タグやカテゴリー、ユーザー名、カスタムフィールドも検索フィールドに含めるには、以下のコードをfunction.phpに追記します。
【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}.post_author IN (
SELECT distinct ID
FROM {$wpdb->users}
WHERE display_name 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 post_id
FROM {$wpdb->postmeta}
WHERE meta_value LIKE '{$search_word}'
)
) ";
}
}
}
return $search;
}
add_filter('posts_search', function($search) { return str_replace(')) AND ((', ')) OR ((', $search); });
- 導入事例
- Titan Tipsの検索機能に適用:http://tips.titan-art.com/2
- 【更新履歴】
- 2020.12.01 記事を公開しました。
- 最新記事
-
タグマネージャーの設定(随時更新)
2021.11.09 WEB・APPSEO対策
mori -
メルマガの開封・クリックをGoogleアナリティクスで測定する方法
2021.10.19 WEB・APPテクニックSEO対策
mori -
横スクロールサイトがかっこいいサイト
2021.10.18 WEB・APPテクニックアイデア
mori
- タグ
- UX・UIデザインバックエンドフロントエンドECサイトサーバー・ドメインSNSツールPHPSEOWebツールnoteJavaScriptGoogleTagManagerGitFacebookショップサーブオウンドメディアCSSSearchConsoleVScodeInstagramお名前ドットコムカラーミーCMSHTMLGoogleAnalyticsXDプログラム言語TwitterhetemlEC-CUBEWordPress操作方法アプリ画像関係PythonVBAデータベースMySQLRubyShopify
- 月別アーカイブ
-