##困っていること
Wordpressのfunctions.phpに以下のようにカスタムフィールド を検索対象に含めるためのコードを追加したのですが、うまく動きません。
デフォルトの検索のクエリパラメータ付きのURLはexample.com/?q=query_keyword となると思うのですが、
example.com/?s=query_keyword となると思うのですが、
Search & filter proというプラグインを使用しているため、検索ページで検索するとexample.com/?_sf_s=query_keyword example.com/search/?_sf_s=query_keywordというURLになります。
##期待する動作
カスタムフィールド に"hogehoge"などのキーワードを入力し、検索して、検索結果に表示したい
##試したこと
search & fiter Proのサポートに連絡すると、検索対象の幅をカスタムフィールド に広げるにはRelevanssiというプラグインを使用してください、ということでそちらも試しましたが、PHPのバージョンがサポート外となっておりそちらの方法は使えませんでした。
##環境
PHP (5.6.40)
Wordpress 5.7.2
PHP
1<?php 2//set custom fields to search target 3function custom_search($search, $wp_query) { 4 global $wpdb; 5 6 //検索対象ページ以外だったら終了 7 if (!$wp_query->is_search) 8 return $search; 9 if (!isset($wp_query->query_vars)) 10 return $search; 11 12 $search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : ''); 13 if ( count($search_words) > 0 ) { 14 $search = ''; 15 $search .= "AND post_type = 'post'"; 16 foreach ( $search_words as $word ) { 17 if ( !empty($word) ) { 18 $search_word = '%' . esc_sql( $word ) . '%'; 19 $search .= " AND ( 20 {$wpdb->posts}.post_title LIKE '{$search_word}' 21 OR {$wpdb->posts}.post_content LIKE '{$search_word}' 22 OR {$wpdb->posts}.ID IN ( 23 SELECT distinct post_id 24 FROM {$wpdb->postmeta} 25 WHERE meta_value LIKE '{$search_word}' 26 ) 27 ) "; 28 29 } 30 } 31 } 32 return $search; 33} 34add_filter('posts_search','custom_search', 10, 2);
プラグインを使わずにカスタムフィールド を検索対象に含めるには、どうしたら良いでしょうか。
よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー