今日やった事は2つ。1つは検索する前に件数をカウントして、実際に行を選択してくるかどうかの制御を行う事と、絞込み条件エリアの新設。
件数のカウントは簡単にできた。知恵だなーと思ったのは、
SELECT COUNT(col) FROM ...
としただけだと、PHP側で値を取って来るのがやや面倒なのが、
SELECT COUNT(col) AS cnt FROM …
とする事で、$row->cntでアクセスできるようになるというあたり。普通にSELECTする時はAS使ってたけど、カウントで使うってのはなるほどなと。
しかし、手間取ったのはこの後で、検索結果がある一定数を越えたら検索しないという制御を行うにあたり、「一定数」を定数化して、プログラムに手を加えなくとも可変にできるようにしようと思った部分。ショートコードを画面の上方においておき、そこでグローバル変数にデータをセット(今は固定値だけど、将来的にDBから持ってくるようにしたい)し、Ajaxで呼び出されるコールバック関数内でその値を参照しようとしたのだが、全然参照できなかった。
よーく考えてみると、ショートコードとAjaxで動くPHPプログラムは、同じfunctions.phpに記述されてはいるものの、恐らく別プロセスで動いているのだろう。そんなのいくらグローバル変数宣言したところで参照できるはずもない。恐らくもう少し上のレベルで共有するような仕組みがあると思われる($wp_dbのような)のだけど、ちょっとそこまで辿りつけなかったので今回はグローバル化はやめて、今は固定値を入れたままにしている。将来的にはここはDBから持ってくるにしても、管理用テーブルも設計しないといけないし、後の課題にしようかと思う。
Ajaxで呼び出される度に、管理用テーブルを検索しに行くのが、どの程度のオーバーヘッドなのかは、今後の検証で明らかにして行く事にする。
そして、次が絞り込み条件エリアの新設。まぁ手間取ったのはあまりPHPに慣れていないからであり、時間はかかったけどある程度はできた。しかしデザイン的にこれじゃ使えないw
検索条件エリアは、スタイルシートのdisplay属性にnoneを指定して消しておき、チェックボックスの選択で表示しようとしたのだけど、余り綺麗に並んでくれない。inlineとかinline-blockとか色々あるけど、親に「inline-block」子に「flex」を指定したら、まぁまぁ想定に近い形にはなった。だけど正直酷いw
幅や折り返しなど、まだまだ調整しないといけないだろうし、style属性直書きってのもみっともない。ここはclassを子テーマのstyle.cssに定義し、HTMLやPHPではそのclassを使うような記述にしないといけないだろうな。ただ、こういうHTMLの作り方は実は今までやってきていないので、すんごく不安。でもこれができるとHTMLはかなりスッキリできるはず。
今日はここまでにして、明日は絞込み条件をAjax側に渡して実際にWHERE句を動的に作る部分の実装をしてみようかと思う。データの入力とどっちが先の方がいいかな…。このあたりは明日の状況次第という事にしよう。

