web-dev-qa-db-de.com

Hinzufügen eines Arrays aus einer Abfragezeichenfolge zu einem WP meta_query

Ich sammle Werte aus einer Abfragezeichenfolge als Array. Sammeln Sie dann diese Werte und platzieren Sie sie in den Wert der 'meta_query'.

Ich habe Probleme, wenn von der WP_Query nichts ausgegeben wird. Ich habe das Gefühl, dass mit dem zweiten Array in der 'meta_query' etwas nicht stimmt.

Ich habe versucht, den Vergleich auf "LIKE" zu ändern, und dies zeigt den gesamten Inhalt anstelle dessen, was in der Abfrage enthalten ist. Ich habe auch versucht, die Relation OR zu entfernen, sie hat keine Auswirkung auf das Ergebnis.

Wenn ich die Variable drucke, erreiche ich das richtige Array, das ich möchte.

Abfragezeichenfolge:

?variable[]=value1&variable[]=value2

PHP Code:

<?php
$variable_selected = $_GET['variable'];

$filter = array(
    'post_type' => 'my_custom_post_type',
    'meta_query' => array(
        'relation' => 'OR',
         array(
            'key' => 'my_post_field',
            'value' => $variable_selected,
            'compare' => 'IN'
            )
        )

    );

    $posts = new WP_Query( $filter  );

Jede Hilfe dazu wird großartig sein.

1
Mike Boory

Dieser $_GET['variable'] ist ein Array. Gemäß Ihrer URL-Abfragezeichenfolge sollten ?variable[]=value1&variable[]=value2, $_GET['variable'][0] und $_GET['variable'][1] diese beiden Schlüsselwerte zurückgeben

Bearbeiten - nach der Diskussion - dynamisieren

$meta_query = array();
if ( ! empty( $_GET["variable"] ) ) {
    if ( is_array( $_GET["variable"] ) ) {
        $meta_query['relation'] = 'OR';
        foreach ( $_GET["variable"] as $value ) {
            $meta_query[] = array(
                'key' => 'my_post_field',
                'value' => sanitize_text_field( (string) $value ),
                'compare' => '='
            );
        }
    } else {
        $meta_query = array(
            'key' => 'my_post_field',
            'value' => sanitize_text_field( (string) $_GET["variable"] ),
            'compare' => '='
        );
    }
}
$filter = array(
    'post_type' => 'my_custom_post_type',
    'meta_query' => array(
        'relation' => 'OR',
        $meta_query
    )
);
$posts = new WP_Query( $filter );

Ich habe den Operator in = geändert, weil ich ihn getestet habe und er bei meiner lokalen Installation funktioniert hat.

meta_compare (string) - Operator zum Testen des 'meta_value'. Mögliche Werte sind '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN ',' NOT BETWEEN ',' NOT EXISTS ',' REGEXP ',' NOT REGEXP 'oder' RLIKE '. Der Standardwert ist '='. - codex

1
Samuel Elh