web-dev-qa-db-ja.com

値として配列を持つmeta_query

私は自分のサイトのユーザーが自分のpost_metaでフォームを送信したり投稿を問い合わせたりできるようにするPHPを書いています。 post_metaを作成するためにAdvanced Custom Fieldsを使い、ACFは直列化された配列としてメタ値を保存します。 ACFが管理パネルのカスタムフィールドに事前入力できるように、データをこの形式で保存する必要があります。値の配列(ユーザーがフォーム内のチェックボックスで選択)をデータベース内の直列化された配列と比較する方法が必要です。私のクエリの最初の部分は次のようになっています。$アメニティはチェックボックスの値の配列です。

$the_query = new WP_Query(
    array(
        'post_type' => 'listing',
        'meta_query' => array(
            array(
                'key' => 'distance',
                'value' => $distance,
                'type' => 'numeric',
                'compare' => '<='
            ),
            array(
                'key' => 'amenities',
                'value' => $amenities[0],
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'amenities',
                'value' => $amenities[1],
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'amenities',
                'value' => $amenities[2],
                'compare' => 'LIKE'
            )
        )
    )
);

クエリを機能させる唯一の方法は、ユーザーがチェックボックスに入力した可能性のあるそれぞれの値($アメニティ[#])を照会することですが、これは私のデータベースでは処理するには面倒すぎるようです。

2
tyler

ユーザーが選択したチェックボックスを通り、その値の配列を動的にクエリに追加するカスタムクエリを作成する方法を見つけました。このようにして、選択された各値が直列化された配列にあるかどうかを確認してから、次の値に進みます。私が以前やっていたよりもずっとスムーズに走ります。

for ($i=0; $i< count($amenities); $i++)
    {
        $count = count($arrays);
        $arrays[$count] = array(
                    'key' => 'amenities',
                    'value' => $amenities[$i],
                    'compare' => 'LIKE'
                    );
    }

$the_query = new WP_Query(array(
        'post_type' => 'listing',
        'post_status' => 'publish', 
        'category_name' => 'private_rental',
        'meta_query' => $arrays
    ));
1
tyler