按中继器ACF字段的2个值查询

时间:2014-04-12 作者:MikO

假设我有一个自定义的post类型,名为Film, 带有一个名为Showings, 带字段start_datetimediscount.

我需要查询那些下周至少有一场放映并且(本次放映)也有折扣的电影。

我现在的查询检索的是下周至少有一场放映的电影,以及至少有一场(可能是其他)打折放映的电影。它不会检查这两个放映是否相同!

我的查询:

$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\\u键中的数字是否相同,例如showings_5_start_datetimeshowings_5_discount.

有什么想法吗?

2 个回复
SO网友:Maroun Melhem

我知道这是一个老问题,但我想我会把答案贴出来,以防其他人也面临同样的问题。

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

Query:

//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

我希望这有帮助,

干杯

SO网友:Muhammad Asad

首先,您需要循环中继器有多少个值,例如anada\\u number\\u 0\\u anada\\u number
anada\\u number\\u 1\\u anada\\u number
anada\\u number\\u 2\\u anada\\u number

在我的情况下,我有五次转发器字段

    for( $i=0; $i<5; $i++ ){ 
        $meta_query[\'anada_number\'][] = array( 
        \'key\' => \'anada_number_\'.$i.\'_anada_number\', 
        \'value\' => $anada_number, 
        ); 
    } 
然后在查询参数中使用它

$arg = array( 
    $meta_query[\'anada_number\'] 
);

$wp_query = new WP_Query($arg);

结束

相关推荐

隐藏没有子项的分类WP_QUERY和TAX_QUERY

我有这个代码,通过研究花了7个多小时才完成,但在过去的几个小时左右,我遇到了麻烦!如果没有与分类法标题相关的帖子,我要求将其隐藏。页面如下:http://cb.dannycheeseman.me/wine-menu/usa/california/这是我的代码:/**********************************************/ // CUSTOM WINE MENU SHORTCODE /************************************

按中继器ACF字段的2个值查询 - 小码农CODE - 行之有效找到问题解决它

按中继器ACF字段的2个值查询

时间:2014-04-12 作者:MikO

假设我有一个自定义的post类型,名为Film, 带有一个名为Showings, 带字段start_datetimediscount.

我需要查询那些下周至少有一场放映并且(本次放映)也有折扣的电影。

我现在的查询检索的是下周至少有一场放映的电影,以及至少有一场(可能是其他)打折放映的电影。它不会检查这两个放映是否相同!

我的查询:

$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\\u键中的数字是否相同,例如showings_5_start_datetimeshowings_5_discount.

有什么想法吗?

2 个回复
SO网友:Maroun Melhem

我知道这是一个老问题,但我想我会把答案贴出来,以防其他人也面临同样的问题。

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

Query:

//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

我希望这有帮助,

干杯

SO网友:Muhammad Asad

首先,您需要循环中继器有多少个值,例如anada\\u number\\u 0\\u anada\\u number
anada\\u number\\u 1\\u anada\\u number
anada\\u number\\u 2\\u anada\\u number

在我的情况下,我有五次转发器字段

    for( $i=0; $i<5; $i++ ){ 
        $meta_query[\'anada_number\'][] = array( 
        \'key\' => \'anada_number_\'.$i.\'_anada_number\', 
        \'value\' => $anada_number, 
        ); 
    } 
然后在查询参数中使用它

$arg = array( 
    $meta_query[\'anada_number\'] 
);

$wp_query = new WP_Query($arg);

相关推荐

如何读取WordPress$Query关联数组(散列)键的值

WordPress编程新手(来自更为传统的环境),并试图了解其一些“独特”特性。我们的网站上有一个目录页,此代码驻留在functions.php, 如果条件为true,则调整结果。if( $query->is_post_type_archive( \'directory\' ) ){ ...//do stuff } 我想知道如何获取is_post_type_archive 这就是“目录”当我对值使用测试时。。。var_dumb($query->is_post