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

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

ただいまの
回答率

90.37%

  • WordPress

    8239questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 598

system108

score 3

 前提・実現したいこと

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+4

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

function search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
      $query->set('post_type', 'post');
    }
  }
}

add_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/28 03:11

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

    キャンセル

  • 2018/01/28 03:33 編集

    Serch.php の話は一度も出していませんが、どこから出てきましたか?
    二つ目のリンクを読んだ上でコメントされているとすれば、PHPに慣れておられないのでしょうか。

    WordPress のカスタマイズを行うにはPHP/HTML/CSSの知識が必須で、場合によってはJavaScriptの知識も必要になります。仕事でされているなら外注を検討してみてください。趣味でサイトを作成されているのであれば、それぞれの入門書を読んでみることをお勧めします。

    キャンセル

  • 2018/01/28 04:05 編集

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

    キャンセル

  • 2018/01/28 13:29

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

    キャンセル

同じタグがついた質問を見る

  • WordPress

    8239questions

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