質問: Wordpressで地域店舗のポ-タルサイトを作ろうとしており、以下について教えてください。 Wordpressの投稿(post)が各店舗の情報となっています。 カスタムフィ-ルドで住所デ-タ(address)を追加しており、各店舗(post)にはそれぞれ住所が入っています。 そして各店舗はそれぞれ、「ペット関係」「家関係」「飲食」というカテゴリ-のいずれかに属しています。 現在、トップペ-ジには入力フォ-ムがあり、そのフォ-ムに住所の一部を入れ「検索」ボタンを押すとマップが表示され、そのマップ上に先ほど入力したワ-ドを住所デ-タ(address)に含んだ店舗のみが表示されるようになっております。 例えばこのフォ-ムに「世田谷区」と入力すると世田谷区にある店舗が、「千代田区」と入力すると千代田区の店舗が表示されるようになっています。 フォ-ムの上にそれぞれのカテゴリ-のチェックボックスを作り、そこにチェックをつけて、更に住所を入れ、「検索」ボタンを押すと、チェックのついたカテゴリ-の、入力された住所にある店舗のみをマップに表示させたいのです。 これをどうすれば上記が満足できるでしょうか。
回答: カテゴリーを検索条件に入れるためのパラメータがいくつかあるのですが、質問のケースでは category__in を使うのが良いと思います。 → 関数リファレンス/WP Query - WordPress Codex 日本語版 検索用のフォームには、PHP の配列形式で受け取れるような name を指定した を追加します。 プログラムの骨子はこんな感じです。 ``` 検索したい地域 飲食 家関係 ファッション関係 ペット関係 ... 'post', 'posts_per_page' => -1, 'meta_query' => array(array( 'key' => 'address', 'value' => $place, 'compare' => 'LIKE' )) ); // カテゴリーのどれかにチェックが入っていたら、検索条件を追加する $cc = $_POST['cc']; if (sizeof($cc) > 0) { $args['category__in'] = $cc; } $the_query = new WP_Query($args); if ($the_query->have_posts()): ... ``` チェックボックスの value に設定しているのは、カテゴリーの ID です。 チェックを入れたものしかリクエストパラメータに乗らないので、ひとつもチェックが入っていない場合には、`$_POST['cc']` で取得した配列は空の配列になります。 カテゴリーのチェックが入っているかどうかを判定して、WP_Query のパラメータに検索条件を追加して、後は元の通り検索をします。