質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

734閲覧

wordpressでラジオボタンのみの検索フォームからカスタムフィールドの検索結果の抽出方法

system108

総合スコア12

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2018/01/27 09:13

編集2018/01/27 21:39

前提・実現したいこと

searchform.phpでラジオボタンだけの検索フォームを作成しました。
ラジオボタンの値とカスタムフィールドに設定している記事の検索結果を表示したいのです。

発生している問題・エラーメッセージ

恥ずかしいですが、search.php側の記述方法が理解できず記述方法がわかりません。
例えばSearchform側で年齢:20代、仕事:事務、で検索を行ったときにカスタムフィールドに設定してある年齢:20代、仕事:事務の投稿を表示するSearch.phpのサンプルや参考サイトをご教示頂けないでしょうか。

該当のソースコード

searchform.php <form role="search" method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>"> <input type="hidden" name="s" placeholder="キーワード..."> 年齢<br> <td> <label class="control-label"><input type="radio" name="age_id" id="age_id_1" value="20代" />20代</label> <label class="control-label"><input type="radio" name="age_id" id="age_id_2" value="30dai" />30代</label> <label class="control-label"><input type="radio" name="age_id" id="age_id_3" value="40dai" />40代</label> <label class="control-label"><input type="radio" name="age_id" id="age_id_4" value="50dai" />50代以上</label> </td> <br>仕事<br> <td> <label class="control-label"><input type="radio" name="job_id" id="job_id_1" value="eigyo" />営業</label> <label class="control-label"><input type="radio" name="job_id" id="job_id_2" value="jimu" />事務</label> <label class="control-label"><input type="radio" name="job_id" id="job_id_3" value="gijutu" />技術系</label> </td> <p><input type="submit" value="検索"></p> </form>

search.php

<?php $s = $_GET['s']; $age = $_GET['age_id']; //meta_query用 if($type){ $metaquerysp[] = array( 'key'=>'nenrei', 'value'=> $age, 'compare'=>'LIKE', ); } ?> <div>検索条件</div> <?php if($s){ ?>検索キーワード:<?php echo $s; ?><br><?php } ?> <?php if($age){ ?>カスタムフィールド:<?php echo $age; } ?> <div>検索結果</div> <?php query_posts( array( 'meta_query' => $metaquerysp, 's' => $s, ) ); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div><?php the_title(); ?></div> <div><?php the_content(); ?></div> <?php endwhile; else : ?> <div>該当なし</div> <?php endif; wp_reset_query(); ?>

試したこと

現時点では検索結果の対象年齢だけにしています。
テキスト検索を行った場合は検索結果が出力されますが、ラジオボタンでは該当なしになってしまいます。

Custom Field Template(バージョン 2.3.7)
上記プラグインにラジオボタンにあったフィールドを追加しました。
Search Everything options (current version 8.1.9)
カスタムフィールドを検索対象に設定しました。

補足情報(FW/ツールのバージョンなど)

teratailで質問するのも初めてでお目汚しな質問をしてしまい申し訳ありませんが、是非アドバイスをお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

functions.php に下記のようなコードを書くことで検索内容を操作することができます。

【Plugin API/Action Reference/pre get posts « WordPress Codex】
https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts#Exclude_Pages_from_Search_Results

PHP

1function search_filter($query) { 2 if ( !is_admin() && $query->is_main_query() ) { 3 if ($query->is_search) { 4 $query->set('post_type', 'post'); 5 } 6 } 7} 8 9add_action('pre_get_posts','search_filter');

あとは $_GET['age_id'] とかからの内容を取得して meta_query を書き換えればできると思います。

【pre_get_postsフックでmeta_queryを変える方法 - Daily GLOCALISM】
http://daily.glocalism.jp/memo/modifying-meta_query-using-pre_get_posts/

投稿2018/01/27 17:27

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

system108

2018/01/27 18:11

kei344様 ご回答頂きありがとうございます。 参考サイトも付けて頂き非常に助かりました。 完全に私の知識不足で申し訳ありませんが、追加で質問させてください。 meta_queryを記載するのはfunctions.phpのご教示頂いたコードに追記すれば良いのでしょうか。 それともSerch.php内で記載すればいいのでしょうか。
kei344

2018/01/27 18:34 編集

Serch.php の話は一度も出していませんが、どこから出てきましたか? 二つ目のリンクを読んだ上でコメントされているとすれば、PHPに慣れておられないのでしょうか。 WordPress のカスタマイズを行うにはPHP/HTML/CSSの知識が必須で、場合によってはJavaScriptの知識も必要になります。仕事でされているなら外注を検討してみてください。趣味でサイトを作成されているのであれば、それぞれの入門書を読んでみることをお勧めします。
system108

2018/01/27 19:08 編集

kei344様 ご回答ありがとうございます。 また不躾な質問をしてしまい申し訳ありません。 仰る通りPHPなどの基礎知識が足りていないことを改めて自覚しました。 serch.phpについては、今回質問させて頂いた内容の類似質問や実現方法を検索している中でserch.phpで実現しているであろう物が多かったため、serch.phpで記載するものと思い込んでしまったことからの追加質問です。 例えばhttps://teratail.com/questions/86058 も今回質問させて頂いた内容に近いと思いserch.phpでの実現が一般的なのかと考えてしまいました。 お手間を取らせてしまい申し訳ありません。
system108

2018/01/28 04:29

参考サイトを熟読して、少しだけ先に勧めました。 基礎知識を付けて完成までがんばります。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問