web-dev-qa-db-fra.com

Interrogation par 2 valeurs d'un champ ACF de répéteur

Supposons que j'ai un type de publication personnalisé appelé Film, avec un champ répéteur appelé Showings, avec les champs start_datetime et discount.

J'ai besoin de faire une requête pour les films qui ont au moins une projection qui est dans la semaine prochaine et (cette projection) a aussi une réduction.

La requête que j'ai maintenant récupère les films avec au moins un film dans la semaine suivante et au moins un film (peut-être un autre) avec une réduction. Il ne vérifie pas que ces 2 indices sont les mêmes!

Ma requête:

$args = array(
    'numberposts'       => -1,
    'post_type'         => 'film',
    'meta_key'          => 'showings_%_start_datetime',         
    'meta_value'        => array( time(), strtotime('+1week') ),
    'meta_type'         => 'NUMERIC',
    'meta_compare'      => 'BETWEEN',
    'orderby'           => 'meta_value',
    'order'             => 'ASC',
    'meta_query'        => array(
        'relation'  => 'AND',
        array(
            'key'       => 'showings_%_discount',
            'value'     => 'students',
            'type'      => 'CHAR',
            'compare'   => '='
        )
    )
);

J'ai vérifié la requête SQL générée et je ne pense pas que ce soit possible, car les affichages, puisqu'il s'agit d'un champ répéteur, n'ont pas d'identifiant correct. Nous devons donc vérifier que le nombre à l'intérieur de la méta_key est correct. les mêmes, par exemple showings_5_start_datetime et showings_5_discount.

Des idées s'il vous plaît?

1
MikO

Je sais que c'est une vieille question, mais je pensais poster la réponse au cas où quelqu'un d'autre serait confronté au même problème.

functions.php :

    function add_cond_to_where( $where ) {

        //Replace showings_$ with repeater_slug_$
        $where = str_replace("meta_key = 'showings_$", "meta_key LIKE 'showings_%", $where);

        return $where;
    }

add_filter('posts_where', 'add_cond_to_where');

Requête:

//Replace showings_$ with repeater_slug_$
//Replace _discounts with _sub_element_slug
    $args = array(
        'meta_query'        => array(
            array(
                'key'       => 'showings_$_discount',
                'value'     => 'students',
                'compare'   => '='
            )
        )
    );

Référence: https://www.advancedcustomfields.com/resources/query-posts-custom-fields

J'espère que ça aide,

À votre santé!

1
Maroun Melhem