不動産プロパティのカスタム投稿タイプと価格、都市、最新などを使用してこれらのカスタム投稿タイプを検索する検索フォームを設定しました。クエリ変数文字列/ ifステートメントを使用して結果を表示しますが、ソートオプションに問題があります。最新、価格低〜高、価格高〜低の3種類のオプションが用意されています。変数のすべての値を表示するPHPワイルドカード
デフォルトの結果が表示されると、ソートは正しく機能しませんが、都市が検索ドロップダウンに設定されていると、ソートは完全に機能します。都市で検索する
、我々は場所にこのコードを持っている:
if (isset($_POST['city'])) {
$qs_city = get_query_var('city');
}
else {
$qs_city = " ";
私は、これは上記のコードのelse
部分によるものであると信じています。都市が設定されていない場合、リストされているすべての都市をリストすることができるようなワイルドカードが必要です。我々はいくつかの異なることを試みましたが、何も動作していないようです。私はこれについてかなり新しいので、必要に応じて上記のいずれかを明確にすることができます。
これは、並べ替えに使用するコードです:
if (isset($_POST['sort'])) {
$qs_sort = get_query_var('sort');
switch ($qs_sort) {
case 'newest':
$args = array(
'post_type' => 'residential',
'posts_per_page' => 10,
'paged' => $paged,
'orderby' => 'L_StatusDate',
'order' => 'DESC',
'meta_query' => array(
array(
'key' => 'L_City',
'value' => $qs_city,
'compare' => 'LIKE'
),
array(
'key' => 'L_SystemPrice',
'value' => array($qs_price_min, $qs_price_max),
'type' => 'numeric',
'compare' => 'BETWEEN'
),
array(
'key' => 'LM_Int1_2',
'value' => $qs_beds,
'compare' => '>='
),
array(
'key' => 'LM_Int1_3',
'value' => $qs_baths,
'compare' => '>='
)
)
);
break;
case 'price-low':
$args = array(
'post_type' => 'residential',
'posts_per_page' => 10,
'paged' => $paged,
'orderby' => 'L_SystemPrice',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'L_City',
'value' => $qs_city,
'compare' => 'LIKE'
),
array(
'key' => 'L_SystemPrice',
'value' => array($qs_price_min, $qs_price_max),
'type' => 'numeric',
'compare' => 'BETWEEN'
),
array(
'key' => 'LM_Int1_2',
'value' => $qs_beds,
'compare' => '>='
),
array(
'key' => 'LM_Int1_3',
'value' => $qs_baths,
'compare' => '>='
)
)
);
break;
case 'price-high':
$args = array(
'post_type' => 'residential',
'posts_per_page' => 10,
'paged' => $paged,
'orderby' => 'L_SystemPrice',
'order' => 'DESC',
'meta_query' => array(
//'relation' => 'AND',
array(
'key' => 'L_City',
'value' => $qs_city,
'compare' => 'LIKE'
),
array(
'key' => 'L_SystemPrice',
'value' => array($qs_price_min, $qs_price_max),
'type' => 'numeric',
'compare' => 'BETWEEN'
),
array(
'key' => 'LM_Int1_2',
'value' => $qs_beds,
'compare' => '>='
),
array(
'key' => 'LM_Int1_3',
'value' => $qs_baths,
'compare' => '>='
)
)
);
break;
}
}
else {
$args = array(
'post_type' => 'residential',
'posts_per_page' => 10,
'paged' => $paged,
'meta_query' => array(
//'relation' => 'AND',
array(
'key' => 'L_StatusDate',
'orderby' => 'DESC'
//set default to sort by newest
),
array(
'key' => 'L_City',
'value' => $qs_city,
'compare' => 'LIKE'
),
array(
'key' => 'L_SystemPrice',
'value' => array($qs_price_min, $qs_price_max),
'type' => 'numeric',
'compare' => 'BETWEEN'
),
array(
'key' => 'LM_Int1_2',
'value' => $qs_beds,
'compare' => '>='
),
array(
'key' => 'LM_Int1_3',
'value' => $qs_baths,
'compare' => '>='
)
)
);
}
?>
に置き換えます。私はデータベースにmy sqlを使用します。 %を使用すると、検索フォームで都市が選択されるまで、デフォルトの結果は何も表示されません。デフォルトですべての都市を表示したいと考えています。 – courtneyGCM
@courtneyGCM、答えはまさにあなたが必要としていたものです。あなたが尋ねたワイルドカードです。あなたが提供したコードのどれも、SQLクエリへのパラメータの実際の変換を含みません。しかし、SQLクエリ(あなたのケースではMySQL)では、ワイルドカードは%記号です。それがうまく行かない場合は、チェックする必要があるプロジェクト内に別のコードがあることを意味します。提案された "%"記号の変更を含む実際のSQLクエリを見てください – junior