Wordpress プラグインSearch & Filter Pro のフリーワード検索にカスタムフィールドを含める
絞り込み検索の実装には欠かせない「Search & Filter Pro - Advanced Filtering for WordPress」。
しかしこれだけでは、カスタムフィールドのフリーワード検索はできなかった。
結局、ACFを含むカスタームフィールドを検索するために functions.php に追記が必要。
こんな感じ。
function casestudy_search($search, $wp_query) { // *1「casestudy_search」は好きな名称で 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 = ''; $search .= "AND post_type = 'casestudy'"; // 投稿タイプ名。通常の投稿の場合は casestudy を post に。 foreach ( $search_words as $word ) { if ( !empty($word) ) { $search_word = '%' . esc_sql( $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 post_id FROM {$wpdb->postmeta} WHERE meta_value LIKE '{$search_word}' ) ) "; } } } return $search; } add_filter('posts_search','casestudy_search', 10, 2); // 「casestudy_search」の部分は*1で設定したは好きな名称で
今回は事例紹介なので、
カスタム投稿「casestudy」を対象にしました。
参考にさせていただきました
WordPressでカスタムフィールドの値をサイト内検索の対象にする方法(プラグインなし)
https://www.webernote.net/wordpress/custom-fields-search.html