web-dev-qa-db-fra.com

Ajouter un tableau à partir d'une chaîne de requête WP meta_query

Je collecte les valeurs d'une chaîne de requête sous forme de tableau. Ensuite, collectez ces valeurs et placez-les dans la valeur de 'meta_query'.

J'ai des problèmes où rien ne sort du WP_Query. J'ai l'impression qu'il y a quelque chose qui ne va pas avec le second tableau de la "méta_query".

J'ai essayé de changer la comparaison en 'LIKE', et cela montre tout le contenu au lieu de ce qui est dans la requête. J'ai aussi essayé de supprimer la relation OR elle n'a aucun effet sur le résultat.

Lorsque j'imprime la variable, j'obtiens le bon tableau que je veux.

Chaîne de requête:

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

Code PHP:

<?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  );

Toute aide sur ce sera génial.

1
Mike Boory

Ce $_GET['variable'] est un tableau, selon votre chaîne de requête d'URL ?variable[]=value1&variable[]=value2, $_GET['variable'][0] et $_GET['variable'][1] devrait renvoyer ces 2 valeurs de clé

Éditer - après la discussion - le rendre dynamique

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

J'ai changé l'opérateur en = parce que je le testais et que cela fonctionnait sur mon installation locale.

meta_compare (string) - Opérateur pour tester la 'méta_value'. Les valeurs possibles sont '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'IN', 'NOT IN' ',' NOT BETWEEN ',' NOT EXISTS ',' REGEXP ',' NOT REGEXP 'ou' RLIKE '. La valeur par défaut est '='. - codex

1
Samuel Elh