フォームを複数表示し、それぞれのフォームに入れた値で、検索結果を変えて表示されたいというご依頼の事例をご紹介いたします。
ワードプレスにてカスタムフォーム検索のご依頼の内容
3つのフォームを表示し、下記のような形でそれぞれ検索結果を変えすフォームをページにはめ込まれたいとのことでした。
テキストフィールド1:タイトルのみ検索
テキストフィールド2:特定のカスタムフィールドのみ検索
テキストフィールド3:カスタムフィールドも含めた全ての項目で検索
また、3つ目のフィールドでは
1:タイトル
2:本文
以下カスタムフィールド
3:出版年
4:種類種別
5:コピー
6:引用
7:オリジナル
をすべて検索し検索結果を表示するという形をご希望されていました。
制作方法
まず上記機能を持ったフォームをショートコードでどこにでも埋め込めるようにいたします。
※ショートコードの例
function mysearchform_func( $atts ) { $myform = '3つのフォームのHTML ※検索クエリのsを含む'; return $myform; } add_shortcode( 'mysearchform', 'mysearchform_func' );
次に上記フォームの値が送信されたときに検索結果のWHERE節を変更すれば検索結果を欲しいものに変えることができます。
function mysearchfilter($query) { if ($query->is_search && !is_admin() ) { $s1 = str_replace(" "," ",trim($_GET['s'])); ~条件~ ~ここに検索結果のWHERE節を変更するコード~ } return $query; } add_filter('pre_get_posts','mysearchfilter');
ワードプレスで検索結果を返す前にWHERE節を変更するコードは下記のようなものとなります。
add_filter( 'posts_where', function( $where ) { global $wpdb; $where = $where . " and $wpdb->posts.post_title LIKE '%a%'"; return $where; });
上記例では、一般的な検索結果 かつ タイトルにaが含まれる検索結果のみを返すことができます。
WordPress ワードプレスのカスタム検索フォームの作成、カスタマイズのご相談・ご依頼はWPドクターまでお気軽にお送りください