wake-up-neo.net

meta_query mit array als wert

Ich schreibe einige PHP, mit denen Benutzer meiner Website ein Formular senden und Posts von ihrem Post_meta abfragen können. Bis auf eine Sache funktioniert alles einwandfrei. Ich habe Advanced Custom Fields verwendet, um post_meta zu erstellen, und ACF speichert Meta-Werte als serialisiertes Array. Ich muss die Daten in diesem Format behalten, damit ACF die benutzerdefinierten Felder im Admin-Bereich vorab ausfüllen kann. Ich brauche eine Möglichkeit, ein Array von Werten (die der Benutzer über Kontrollkästchen im Formular auswählt) mit einem serialisierten Array in der Datenbank zu vergleichen. Der erste Teil meiner Abfrage sieht folgendermaßen aus, wobei $ amenities das Array von Kontrollkästchenwerten ist:

$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'
            )
        )
    )
);

Die einzige Möglichkeit, die Abfrage zum Funktionieren zu bringen, besteht darin, nach jedem möglichen Wert ($ amenities [#]) zu fragen, den der Benutzer in die Kontrollkästchen eingegeben haben könnte. Dies scheint jedoch für meine Datenbank zu umständlich zu sein.

2
tyler

Ich habe eine Möglichkeit gefunden, eine benutzerdefinierte Abfrage zu erstellen, die die vom Benutzer ausgewählten Kontrollkästchen durchläuft und anschließend der Abfrage dynamisch ein Array für diesen Wert hinzufügt. Auf diese Weise wird geprüft, ob sich jeder ausgewählte Wert im serialisierten Array befindet, und es wird dann zum nächsten übergegangen. Läuft viel flüssiger als vorher.

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