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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

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

jQuery

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

8168閲覧

検索結果の該当件数をリアルタイムに表示させたい

ikemon

総合スコア39

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

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

jQuery

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2017/03/06 03:53

編集2017/03/07 06:59

###前提・実現したいこと
http://sumaity.com/chintai/tokyo/?lid=smt10008
このサイトの検索フォームのように、項目を選択するだびに該当件数を表示させたいです。

###試したこと
①WordPressのタグを使い検索機能を実装(タグに紐づく投稿記事が検索結果に該当)

②inputがクリックされる度に、チェックの入っているinputのvalueをAjaxでPHPファイル(search-kekka.php)に送る

<form> <label><input type="checkbox" name="checkbox-group[]" value="18">ID:10</label><br> <label><input type="checkbox" name="checkbox-group[]" value="15">ID:15</label><br> <label><input type="checkbox" name="checkbox-group[]" value="13">ID:13</label><br> </form> <div id="result"></div> <script type="text/javascript"> $(function(){ $('input').change(function() { //inputクリックで発生 var checks=[]; //空の配列を用意 $("[name='checkbox-group[]']:checked").each(function(){ checks.push(this.value); //チェックのついているinputのvalueを全て配列に格納 }); $.ajax({ //ajaxによる非同期通信発生 type: "POST", //POST送信でデータを受け渡す url: "search-kekka.php", //search-kekka.phpにデータを送る date: checks, //配列のデータを送る success: function(hoge) //接続が成功 { $('#result').html(hoge); //該当件数を表示 }, error: function(XMLHttpRequest,textStatus,errorThrown) //接続が失敗 { alert('エラーです!'); //エラーを表示 } }); return false; }); }); </script>

Javascript

1チェックの入っているinputのvalueが配列に格納されているかテストし、格納されていることを確認。 2 3 console.log(checks); 4 5["18", "15", "13"] 6

③受け取ったvalueの値から該当する記事数を返す

search-kekka.php

PHP

1<?php require_once( dirname( __FILE__ ) . '/wp-load.php' ); ?> 2 3<?php $atai = $_POST['checks']; //Ajaxで送信された配列を受け取る ?> 4 5<?php 6global $wpdb; 7$myrows = $wpdb->get_results( "SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = '18' OR term_taxonomy_id = '15' OR term_taxonomy_id = '13'" ); //タグが該当する記事を習得 8$gaitou = array(); //空の配列を用意 9foreach ($myrows as $value) { 10 $gaitou[] = $value->object_id; //ループを回して配列にobject_idを格納していく 11 $gaitou_kensu = array_count_values($gaitou); 12} 13$count = count($gaitou_kensu); 14echo $count; 15// $input = $_POST['input']; 16// echo $input); 17?> 18

###質問させていただきたいこと

PHPファイルに送られた配列情報をもとに、以下のように値によってSQLのWHERE条件を変更したいのですが

PHP

1["18", "15", "13"]の場合 2WHERE term_taxonomy_id = '18' OR term_taxonomy_id = '15' OR term_taxonomy_id = '13'

PHP

1["18", "15"]の場合 2WHERE term_taxonomy_id = '18' OR term_taxonomy_id = '15'

このような吐き出しを実現するためのコードはどのように書けばいいでしょうか?

「そもそもこの方法では実現は難しい」「他に実装手段がある」などもございましたらご教授いただけましたら幸いです。

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

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

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

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

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

CHERRY

2017/03/06 04:52 編集

WordPress の関数や変数を使うのであれば、PHPファイルの先頭で wp-load.php を読み込む必要がありますが、読み込まれていますか?
退会済みユーザー

退会済みユーザー

2017/03/06 06:47

WordPressでAjaxを使う場合は、/wp-admin/admin-ajax.phpにリクエストを送るなどの手順があるはずなので、一度その方向も調べてみてはどうでしょうか?
ikemon

2017/03/07 01:02

CHERRY様 読み込まれておりませんでした…。wp-load.phpを読み込みましたら、正常にWordPress の関数や変数が使えました。ありがとうございます!
ikemon

2017/03/07 01:03

miz様 admin-ajax.phpにリクエストを送るなどの手順も一度調べてみます!
guest

回答1

0

ベストアンサー

phpには明るくないのですが、jqueryの記述で1点気になるところがあります。
$ajax命令で

data: "#result", //結果を#resultに表示

と、指定していますが、ここは送るべきデータを指定すべき箇所なので、

data : {"wpdb": $("#wpdbのあるID").val()}

と、送るべきではないでしょうか。
そうすれば、コメント欄で指摘されている点をクリアしていれば、
php側で $_POST['wpdb']とすれば、postされた変数を取得できるのではないでしょうか。

投稿2017/03/06 08:14

akio221

総合スコア716

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

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

ikemon

2017/03/07 03:57

ご指摘ありがとうございます! ```Javascript data: "#result", //結果を#resultに表示 ``` こちらの箇所おっしゃる通り間違っておりました。。
akio221

2017/03/07 04:19

>PHPファイル(search-kekka.php)に配列情報を上手く送ることができませんでした。 再度、jQuery側で・・。 JSON形式で投げるのであれば、一般的な添え字を持つ配列ではなく、 キーと値で設定される連想配列で送る必要があります。 提示されたソースでルールに沿うのであれば、 data : {"checks" : checks } と、すれば、"checks"をキーとする値(checksに束ねた配列)が、POSTされると思います。 php内部での扱いは・・すみません、ちょっと詳しくないので・・・。
ikemon

2017/03/07 05:30

data : {"checks" : checks } ですが、date : {"checks" : checks }で先ほど試しており、動かないと判断しておりました…(スペルミス) data : {"checks" : checks } で問題なくPOSTされました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問