web-dev-qa-db-ja.com

リピーターACFフィールドの2つの値による照会

カスタム投稿タイプFilm、リピーターフィールドShowings、フィールドstart_datetimeおよびdiscountがあるとします。

来週中に少なくとも1つの上映があり、(この上映)また割引がある映画について問い合わせをする必要があります。

私が今持っている質問は、来週中に少なくとも1つの上映と割引で少なくとも1つの上映(たぶん他のもの)で映画を検索します。これら2つの上映が同じであることを確認しません!

私の質問:

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

生成されたSQLクエリをチェックしていますが、リピータフィールドであるため、表示には適切なIDがないため、meta_key内の数字がshowings_5_start_datetimeshowings_5_discountのように同じです。

何かアイデアはありますか?

1
MikO

私はこれが古い質問であることを知っています、しかし私は他の誰かが同じ問題に直面しているならば私が答えを掲示することになっていると思いました。

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

クエリ:

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

参照: https://www.advancedcustomfields.com/resources/query-posts-custom-fields

これが役立つことを願っています、

乾杯!

1
Maroun Melhem