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

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

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

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

PHP

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

Q&A

解決済

2回答

1694閲覧

【php】絞込検索の表示条件を単独から複数に変更したい

optzen

総合スコア38

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/02/23 00:05

編集2019/02/23 01:46

前提・実現したいこと

社内のサイトをカスタマイズしています。絞込検索にて設定している条件を単独から複数にしたいのですがつまづいております。
ご教授をいただけると非常に助かります

現在のソースコード

php

1 if( $hairb == 1 ){ 2 $page_sentaku_dat .= '<input type="hidden" name="hairb" value="1" >'; 3 $hair_data = '<=> 1200' ; 4 } 5

このコードの場合、1200に設定している条件が単独で出力されています。

複数の条件を出力させるにあたり
問題なのは、条件に設定している番号は1000から3000あり、グループが3つに分かれていることです。

1000から1500が1グループ
1501から2000が2グループ
2001から3000が3グループ

このグループを3つに分けると

php

1 2 if( $hairb == 1 ){ 3 $page_sentaku_dat .= '<input type="hidden" name="hairb" value="1" >'; 4 $hair_data = '< 1500' ; 5 } 6 7 if( $hairb == 2 ){ 8 $page_sentaku_dat .= '<input type="hidden" name="hairb" value="2" >'; 9 $hair_data = '> 1501' ; 10 } 11 12 if( $hairb == 3 ){ 13 $page_sentaku_dat .= '<input type="hidden" name="hairb" value="3" >'; 14 $hair_data = '> 2001' ; 15 }

1グループと3グループは問題ないのですが、2グループが3グループの条件まで出力されるのでどうすればよいでしょうか?
初心者で申し訳ないのですがどうぞよろしくお願いいたします

追記 全体のコード

php

1 $page_sentaku_dat .= '<div id="search_page">'; 2 3 //$page_sentaku_dat .= '<h3>カテゴリ'.$shub_txt.'</h3>'; 4 $page_sentaku_dat .= 'ご希望の条件を選択<br />'; 5 6 $page_sentaku_dat .= '<form method="get" id="searchpage" name="searchpage" action="' . $site . '" >'; 7 $page_sentaku_dat .= '<input type="hidden" name="bukken" value="search" >'; 8 9 //1グループ 10 if( $hairb == 1 ){ 11 $page_sentaku_dat .= '<input type="hidden" name="hairb" value="1" >'; 12 $hair_data = '< 1500' ; 13 } 14 15 //2グループ 16 if( $hairb == 2 ){ 17 $page_sentaku_dat .= '<input type="hidden" name="hairb" value="2" >'; 18 $hair_data = '> 1501' ; 19 } 20 //3グループ 21 if( $hairb == 3 ){ 22 $page_sentaku_dat .= '<input type="hidden" name="hairb" value="3" >'; 23 $hair_data = '> 2001' ; 24 } 25 26 $page_sentaku_dat .= '<table class="form_search">'; 27 28 //カテゴリ選択 29 $page_sentaku_dat .= '<tr id="haircat">'; 30 $page_sentaku_dat .= '<th>カテゴリ'.$hairb_txt.'</th>'; 31 $page_sentaku_dat .= '<td class="haircat">'; 32 33 $sql = " SELECT DISTINCT PM.meta_value AS "; 34 $sql .= " FROM ($wpdb->posts AS P "; 35 $sql .= " INNER JOIN $wpdb->postmeta AS PM ON P.ID = PM.post_id) "; 36 37 38 $sql .= apply_filters( 'inc_archive_search_sql_inner_join', '' ); 39 40 $sql .= " WHERE P.post_status='publish' AND P.post_password = '' AND P.post_type ='model' "; 41 $sql .= " AND PM.meta_key='haircategory' "; 42 $sql .= " AND CAST( PM.meta_value AS SIGNED ) ". $hair_data ; 43 44 45 $sql .= apply_filters( 'inc_archive_search_sql_where', '' ); 46 47 $sql .= " ORDER BY PM.meta_value"; 48 $metas = $wpdb->get_results( $sql, ARRAY_A ); 49 50 if(!empty($metas)) { 51 $page_sentaku_dat .= '<ul>'; 52 foreach ( $metas as $meta ) { 53 $haircategory_id = $meta['haircategory']; 54 55 foreach($da_haircategory as $meta_box){ 56 if( $haircategory_id == $meta_box['id'] ){ 57 $page_sentaku_dat .= '<li>'; 58 $page_sentaku_dat .= '<input type="checkbox" name="hair[]" value="'.$meta_box['id'].'" id="'.$meta_box['id'].'"'; 59 60 if( $hair_id && is_array( $hair_id ) ) { 61 foreach( $hair_id as $meta_box4 ){ 62 if( $meta_box4 == $meta_box['id'] ) $page_sentaku_dat .= ' checked="checked"'; 63 } 64 } 65 66 $page_sentaku_dat .= ' /><label for="'.$meta_box['id'].'">'.$meta_box['name'].'</label>'; 67 $page_sentaku_dat .= '</li>'; 68 } 69 } 70 } 71 $page_sentaku_dat .= '</ul>'; 72 } 73 $page_sentaku_dat .= '</td>'; 74 $page_sentaku_dat .= '</tr>';

条件のコード

php

1function da_haircategory_init_model(){ 2 3 global $da_haircategory; 4 5 $da_haircategory = 6 array( 7 "1000" => array("id" => "1000","name" => "キッズ男の子"), 8 "1100" => array("id" => "1100","name" => "キッズ女の子"), 9 "1200" => array("id" => "1200","name" => "キッズショート"), 10 "1300" => array("id" => "1300","name" => "キッズセミ"), 11 "1400" => array("id" => "1400","name" => "キッズロング"), 12 13 "1501" => array("id" => "1501","name" => "メンズベリーショート"), 14 "1600" => array("id" => "1600","name" => "メンズショート"), 15 "1700" => array("id" => "1700","name" => "メンズミィディアム"), 16 "1800" => array("id" => "1800","name" => "メンズロング"), 17 "1900" => array("id" => "1900","name" => "メンズ定番"), 18 "2000" => array("id" => "2000","name" => "メンズ個性的"), 19 20 "2001" => array("id" => "2001","name" => "レディースショート"), 21 "2100" => array("id" => "2100","name" => "レディースミィディアム"), 22 "2200" => array("id" => "2200","name" => "レディースロング"), 23 "2300" => array("id" => "2300","name" => "レディース定番"), 24 "2400" => array("id" => "2400","name" => "レディース個性的"), 25 "2500" => array("id" => "2500","name" => "レディースカラー"), 26 "3000" => array("id" => "3000","name" => "レディース人気") 27 ); 28 29} 30add_action('init', 'da_haircategory_init_model');

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

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

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

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

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

CHERRY

2019/02/23 00:15 編集

上限と下限を設定する必要がありますが、検索部分のコードは、どうなっているのでしょうか?
m.ts10806

2019/02/23 00:24

全体の流れがわかるコード、データの定義、サンプルデータをご提示ください
optzen

2019/02/23 00:44

$page_sentaku_dat .= '<div id="search_page">'; //$page_sentaku_dat .= '<h3>カテゴリ'.$shub_txt.'</h3>'; $page_sentaku_dat .= 'ご希望の条件を選択<br />'; $page_sentaku_dat .= '<form method="get" id="searchpage" name="searchpage" action="' . $site . '" >'; $page_sentaku_dat .= '<input type="hidden" name="bukken" value="search" >'; //1グループ if( $hairb == 1 ){ $page_sentaku_dat .= '<input type="hidden" name="hairb" value="1" >'; $hair_data = '< 1500' ; } //2グループ if( $hairb == 2 ){ $page_sentaku_dat .= '<input type="hidden" name="hairb" value="2" >'; $hair_data = '> 1501' ; } //3グループ if( $hairb == 3 ){ $page_sentaku_dat .= '<input type="hidden" name="hairb" value="3" >'; $hair_data = '> 2001' ; } $page_sentaku_dat .= '<table class="form_search">'; //カテゴリ選択 $page_sentaku_dat .= '<tr id="haircat">'; $page_sentaku_dat .= '<th>カテゴリ'.$hairb_txt.'</th>'; $page_sentaku_dat .= '<td class="haircat">'; $sql = " SELECT DISTINCT PM.meta_value AS haircategory"; $sql .= " FROM ($wpdb->posts AS P "; $sql .= " INNER JOIN $wpdb->postmeta AS PM ON P.ID = PM.post_id) "; $sql .= apply_filters( 'inc_archive_search_sql_inner_join', '' ); $sql .= " WHERE P.post_status='publish' AND P.post_password = '' AND P.post_type ='model' "; $sql .= " AND PM.meta_key='haircategory' "; $sql .= " AND CAST( PM.meta_value AS SIGNED ) ". $hair_data ; $sql .= apply_filters( 'inc_archive_search_sql_where', '' ); $sql .= " ORDER BY PM.meta_value"; $metas = $wpdb->get_results( $sql, ARRAY_A ); if(!empty($metas)) { $page_sentaku_dat .= '<ul>'; foreach ( $metas as $meta ) { $haircategory_id = $meta['haircategory']; foreach($da_haircategory as $meta_box){ if( $haircategory_id == $meta_box['id'] ){ $page_sentaku_dat .= '<li>'; $page_sentaku_dat .= '<input type="checkbox" name="hair[]" value="'.$meta_box['id'].'" id="'.$meta_box['id'].'"'; if( $hair_id && is_array( $hair_id ) ) { foreach( $hair_id as $meta_box4 ){ if( $meta_box4 == $meta_box['id'] ) $page_sentaku_dat .= ' checked="checked"'; } } $page_sentaku_dat .= ' /><label for="'.$meta_box['id'].'">'.$meta_box['name'].'</label>'; $page_sentaku_dat .= '</li>'; } } } $page_sentaku_dat .= '</ul>'; } $page_sentaku_dat .= '</td>'; $page_sentaku_dat .= '</tr>';
optzen

2019/02/23 00:45

ありがとうございます。このようになっています
m.ts10806

2019/02/23 00:50

質問は編集できますし、こちらのコメント欄ではマークダウンが使えませんので適宜ご調整ください
optzen

2019/02/23 01:03

数値のデータは以下です
optzen

2019/02/23 01:03

function da_haircategory_init_model(){ global $da_haircategory; $da_haircategory = array( "1000" => array("id" => "1000","name" => "キッズ男の子"), "1100" => array("id" => "1100","name" => "キッズ女の子"), "1200" => array("id" => "1200","name" => "キッズショート"), "1300" => array("id" => "1300","name" => "キッズセミ"), "1400" => array("id" => "1400","name" => "キッズロング"), "1501" => array("id" => "1501","name" => "メンズベリーショート"), "1600" => array("id" => "1600","name" => "メンズショート"), "1700" => array("id" => "1700","name" => "メンズミィディアム"), "1800" => array("id" => "1800","name" => "メンズロング"), "1900" => array("id" => "1900","name" => "メンズ定番"), "2000" => array("id" => "2000","name" => "メンズ個性的"), "2001" => array("id" => "2001","name" => "レディースショート"), "2100" => array("id" => "2100","name" => "レディースミィディアム"), "2200" => array("id" => "2200","name" => "レディースロング"), "2300" => array("id" => "2300","name" => "レディース定番"), "2400" => array("id" => "2400","name" => "レディース個性的"), "2500" => array("id" => "2500","name" => "レディースカラー"), "3000" => array("id" => "3000","name" => "レディース人気") ); } add_action('init', 'da_haircategory_init_model');
m.ts10806

2019/02/23 01:03

質問は編集できますし、こちらのコメント欄ではマークダウンが使えませんので適宜ご調整ください
optzen

2019/02/23 01:09

どうもすいませんやりなおします
m.ts10806

2019/02/23 01:43

WordPressをタグに追加された方が良いですね。独自仕様も多くphpだけの知識技術では対応しきれない部分も多いです
optzen

2019/02/23 01:48

ありがとうございます 追加させていただきました!
guest

回答2

0

PHPには詳しくない&DBサーバが分からないのですが・・・2グループのwhere句の$hair_data ='> 1501'を'BETWEEN 2001 AND 1502' にできませんか?
参考:指定した範囲のレコードを検索する

投稿2019/02/23 03:44

編集2019/02/23 04:47
cateye

総合スコア6851

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

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

optzen

2019/02/23 07:08

どうもありがとうございます!試しましたが動作しませんでしたが参考にさせていただきます。
guest

0

自己解決

1グループ、2グループ、3グループそれぞれのファイルと既存のファイルを合わせて4つのファイルに分けて
$da_haircategoryのインクルードするコードも$da1_haircategory、$da2_haircategory、$da3_haircategoryの4つにしてそれぞれ処理をするようにいたしました。

みなさまのご意見をいただいたりして解決につながりました。ありがとうございます

投稿2019/02/23 10:37

optzen

総合スコア38

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問