これは腹立たしいです。簡単にできることのように思えることを理解できないようです。中古の RV を販売している Wordpress サイトのカスタム検索機能を構築しています。Woocommerce を使用して製品をカタログ化しています (post_type=post の代わりに post_type=product を使用して製品を作成するだけなので、おそらく重要ではありません)。
カスタム フィールドを使用して、車両の「クラス」(「クラス A」、「クラス B」、「クラス C」など) や「燃料の種類」(「ガソリン」、「ディーゼル」など) などのオプションを定義しています。 「牽引可能」)。したがって、各製品は同じ meta_key に対して異なる meta_value を持つことができますが、各 meta_key は 1 回だけ定義され、meta_key ごとに 1 つの meta_value しか持たない場合があります。
検索フォームの一部はこんな感じ。(他にもありますが、現時点で心配する必要があるのはこれだけです)
<h4>Type / Class</h4>
<label><input type="checkbox" name="a1" value="0" />All Types</label>
<label><input type="checkbox" name="a2" value="Class A" />"Class A" RV's</label>
<label><input type="checkbox" name="a3" value="Class B" />"Class B" RV's</label>
<label><input type="checkbox" name="a4" value="Class C" />"Class C" RV's</label>
<label><input type="checkbox" name="a5" value="Fifth Wheel" />Fifth Wheel RV's</label>
<label><input type="checkbox" name="a6" value="Toy Hauler" />Toy Haulers</label>
<label><input type="checkbox" name="a7" value="Travel Trailer" />Travel Trailer RV's</label>
<label><input type="checkbox" name="a8" value="Camping Trailer" />Camping Trailers</label>
<h4>Engine Type</h4>
<label><input type="checkbox" name="c1" value="0" />All Engine Types</label>
<label><input type="checkbox" name="c2" value="Gasoline" />Gasoline</label>
<label><input type="checkbox" name="c3" value="Diesel" />Diesel</label>
<label><input type="checkbox" name="c4" value="Towable" />Towable</label>
次のクエリを実行して結果を返すために送信されます。
$result = mysql_query("
SELECT * FROM wp_postmeta
WHERE
(meta_key= 'class' AND (meta_value = '$a2' OR meta_value = '$a3' OR meta_value = '$a4' OR meta_value = '$a5' OR meta_value = '$a6' OR meta_value = '$a7' OR meta_value = '$a8'))
");
これは、ボックスが選択されている場合に、選択されたオプションの URL にオプションの true パラメータ (1) を渡すことです (例:「クラス A」の場合、site.com/search/?a2=1&a4=1)。および「クラス C」が選択されます)。これはうまくいくようです。
ただし、この新しいクエリを使用して、別の meta_key とその値の組み合わせを検索しようとすると...
$result = mysql_query("
SELECT * FROM wp_postmeta
WHERE
(meta_key= 'class' AND (meta_value = '$a2' OR meta_value = '$a3' OR meta_value = '$a4' OR meta_value = '$a5' OR meta_value = '$a6' OR meta_value = '$a7' OR meta_value = '$a8'))
AND
(meta_key= 'fuel' AND (meta_value = '$c2' OR meta_value = '$c3' OR meta_value = '$c4'))
");
... もう機能しません :( 各 meta_key ステートメントは独立して機能しますが、AND 演算子を使用して一緒に機能することはありません。私には正しいように思えますが、機能していません。奇妙なことに、5 行目で AND を OR に変更すると機能します、しかし、検索を絞り込むのではなく拡大するため、必要な結果が返されません。
どんな助けでも大歓迎です。私はこれをすべて間違っている可能性があるので、誰かがこれをやってのける方法を知っていれば、他の方法も試してみたい. 私はデザイナーで、最近になってプログラマーになりました。専門知識のレベルはせいぜい中級程度ですので、よろしくお願いします。