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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

2回答

2553閲覧

検索フォームで複数のname="s"をまとめたい

wpmaterialsite

総合スコア6

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/06/21 08:04

前提・実現したいこと

ワードプレス(素材サイト)で、絞り込み検索フォームを作っています。
項目としては、下記のとおりです。
●キーワード
●カテゴリ1(セレクトボックス。jquery.hierselect.jsを使用し、カテゴリ1で選んだ子カテゴリーをカテゴリ2、カテゴリ2で選んだ子カテゴリーをカテゴリ3に自動で表示しています)
●カテゴリ2(セレクトボックス)
●カテゴリ3(セレクトボックス)
●シリーズ
タグ(チェックボックス、AND検索)
キーワード(チェックボックス、AND検索)

●がついている項目にhtmlでname="s"が入っています。
この状態で検索結果を表示すると、うまく機能せず関係ない記事が出てきてしまいます。
検索結果のURLは下記のとおりです。
サイトURL?s=安い&s=食べ物&s=フルーツ&s=りんご&s=ふじ&and-or=AND&tag%5B%5D=aomori&tag%5B%5D=iwate&and-or=AND&s=赤い&s=まるい
このように、s=が別々になるとうまく機能しなくなっているようです。(タグだけの検索は大丈夫でした)
試しにs=に+またはスペースで1つにまとめるとうまくいきました。

s=にまとめる方法、またはそれ以外で解決できる方法をご存知のかたがいらっしゃいましたら
ご教授いただけないでしょうか。
初心者のため何かとおかしな箇所があるかもしれませんがお許しください。
どうぞよろしくお願いいたします。

該当のソースコード

<form role="search" method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>" id="form"> <input type="text" name="s" list="keyword-list" placeholder="キーワードを入力してください" id="key"> <div>カテゴリ1</div> <select id="parent" data-hier-target="#child" data-hier-name="parent-id" name="s"> <option value="食べ物">食べ物</option> <option value="その他">その他</option> </select> <div>カテゴリ2</div> <select id="child" data-hier-target="#child2" data-hier-name="parent-id2" name="s"> <option value="フルーツ" data-parent-id="食べ物">フルーツ</option> <option value="やさい" data-parent-id="食べ物">やさい</option> <option value="スプーン" data-parent-id="その他">スプーン</option> </select> <div>カテゴリ3</div> <select id="child2" data-hier-target="#child3" data-hier-name="parent-id3" name="s"> <option value="りんご" data-parent-id2="フルーツ">りんご</option> <option value="トマト" data-parent-id2="やさい">トマト</option> </select> <div>シリーズ</div> <!-- child --> <select id="child3" name="s"> <option value="ふじ" data-parent-id3="りんご">ふじ</option> <option value="ミニトマト" data-parent-id3="トマト">ミニトマト</option> </select> <div>タグ</div> <select name="and-or" id="select-and-or"> <option value="AND">[AND] チェックした全てのタグを含む</option> <option value="OR">[OR] 以下のどれかのタグを含む</option> </select> <div> <?php $tags = get_terms( 'post_tag' ); $checkboxes = ''; foreach($tags as $tag) : $checkboxes .='<input type="checkbox" name="tag[]" value="'.$tag -> slug.'" id="tag-'.$tag->term_id.'" /><label for="tag-'.$tag->term_id.'">'.$tag->name.'</label>'.'&nbsp;'; endforeach; print $checkboxes; ?> </div> <div>チェックボックス キーワード</div> <select name="and-or" id="select-and-or"> <option value="AND">[AND] チェックした全てのタグを含む</option> <option value="OR">[OR] 以下のどれかのタグを含む</option> </select> <label><input type="checkbox" name="s" value="赤い">赤い</label> <label><input type="checkbox" name="s" value="まるい">まるい</label> <p><input type="submit" value="検索"></p> </form>

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

WordPress バージョン 4.9.6–ja

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/06/21 08:10

sが全角文字になっているようだけど、質問用に一括で置き換えしたときのミスかな?
wpmaterialsite

2018/06/24 06:39

正しくは半角のsです。失礼しました。
guest

回答2

0

仕様によりますがgetでsというキーを羅列しても
受け側としては難しいでしょうね
name="s[]"として、受け側で配列として受け取るわけにはいきませんか?

投稿2018/06/21 10:18

yambejp

総合スコア114775

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

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

wpmaterialsite

2018/06/24 07:00

ご回答ありがとうございます。 name="s[]"にするとして、受け側にはどのように記載すればよいのでしょうか?
unorigino

2018/06/26 06:41

yambejpさんじゃありませんが、、 name="s[]"にすると、$_GET["s"]の中身が配列になって受け取れます。 そもそも何故sで統一する必要があるのでしょう?
wpmaterialsite

2018/07/15 14:19

ご回答ありがとうございました。 あれからname="s[]"にしたり、いろいろ試しましたがうまくいきませんでした。 sでなくても良いのですが、上記に記載しているようにsで手動でまとめたときのみうまくいきましたのでsでまとめたいとしました。
guest

0

htmlのnameの基本的ルールなのですが下記を参照してください。

HTML5 & CSS3 リファレンス name属性 - 要素の名前

[3] input 要素 で,
入力コントロールの名前 を指定します。 フォームのデータが送信されるときには,この名前とデータがセットになっており,サーバー側でどのコントロールのデータかを特定するために使われます。

同じ名前だと、サーバー側でどのコントロールか分からなくなってしまうので、通常は一意な名前を用います。
※カテゴリ1ならcategory_1、シリーズならseries等

どうしても同じ名前にしたい場合は、配列にするのですが、その場合、どのコンロトールか分かる様に、
配列の中身も考慮する必要が出てきます。

投稿2018/06/26 07:05

raichi

総合スコア278

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

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

wpmaterialsite

2018/07/15 14:21

ご回答ありがとうございました。遅くなり申し訳ありません。 配列や、name="series"等でもうまくいきませんでした。 今回は諦めようかと思います。ありがとうございました。
raichi

2018/07/17 09:28 編集

恐らく <select id="child1" name="series"> ~ </select> <select id="child2" name="series"> ~ </select> <select id="child3" name="series"> ~ </select> のようにしてしまったのではないかと推察しますが、 サーバー側ではseriesは一つしか受け取れないので phpの値を入れる感じで書いていくと… id="child1"のselectの選択したものが初めに設定された後、 series = id="child1"の値 id="child2"を更にサーバー側で受け取り series = id="child2"の値 最後にid="child3"で上書く感じになるイメージです。 series = id="child3"の値 最終的にseriesの値は最後のものになるって感じになっている…という状況かと思います。 idを一意にしないと不味いと理解されているようですので、nameも基本的に同じだと理解されたほうがよろしいかと思います。
wpmaterialsite

2018/07/23 13:25

上書きに関しては承知していますが、idを一意にする・しないが結果に影響を及ぼすのでしょうか。 一意にしなければ、結果は望んだ通りになるのでしょうか。 ダメ元で試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問