基于元键的自定义查询-将结果中的三个状态减少到两个?

时间:2018-07-29 作者:Daniel Klose

$args = array(  \'post_type\' => \'bars\',
                \'posts_per_page\' => -1
                \'orderby\' => array( \'meta_value\' => \'DESC\', \'title\' => \'ASC\' ),
                \'meta_query\'  => array(
                     \'relation\' => \'OR\',
                        array(
                          \'key\'     => \'featured_venue\',
                          \'compare\' => \'NOT EXISTS\',
                          ),

                        array(
                          \'relation\' => \'OR\',
                                array(
                                  \'key\'   => \'featured_venue\',
                                  \'value\' => true,
                                ),
                                array(
                                  \'key\'     => \'featured_venue\',
                                  \'value\'   => 0,
                                ),
                        ),
                  ),

);

$query = new WP_Query($args);
我已经在上面查询了名为bars的帖子类型。bar CPT使用ACF通过ACF的True/False复选框使条形图具有特色(https://www.advancedcustomfields.com/resources/true-false/) - ACF正在创建meta key featured\\u场馆。然而,由于ACF字段已添加到现有的帖子中,因此并非所有帖子都有元键。因此,我有以下post状态:

我的目标是首先列出所有场馆并具有特色场馆,然后按字母顺序列出所有其他场馆。但是,我的查询当前给出的结果如下:

按字母顺序排列的特色场馆帖子,带有特色场馆元键=按字母顺序排列的错误帖子,没有按字母顺序排列的特色场馆元键我尝试更改比较值,但未能获得所需的结果。相反,它总是删除带有meta\\u键的帖子,或者删除没有meta\\u键的帖子。

是否可以按我的预期方式修改查询,或者我是否需要将featured\\u venue元键批量添加到所有帖子?

1 个回复
最合适的回答,由SO网友:OriginalEXE 整理而成

这可以通过向ORDER BY 陈述

尝试在通话前添加此内容new WP_Query($args);:

$setDefaultOrderby = function($statement) {
    return str_replace(\'wp_postmeta.meta_value\', "COALESCE(wp_postmeta.meta_value, \'false\')", $statement);
};

add_filter(\'posts_orderby\', $setDefaultOrderby);
之后是:

remove_filter(\'posts_orderby\', $setDefaultOrderby);
更改\'false\' 使用您需要的默认值。

我正在使用COALESCE 这里,它基本上选择了您传递给它的第一个参数NULL, 本质上允许您为没有元键的帖子提供回退。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post

基于元键的自定义查询-将结果中的三个状态减少到两个? - 小码农CODE - 行之有效找到问题解决它

基于元键的自定义查询-将结果中的三个状态减少到两个?

时间:2018-07-29 作者:Daniel Klose

$args = array(  \'post_type\' => \'bars\',
                \'posts_per_page\' => -1
                \'orderby\' => array( \'meta_value\' => \'DESC\', \'title\' => \'ASC\' ),
                \'meta_query\'  => array(
                     \'relation\' => \'OR\',
                        array(
                          \'key\'     => \'featured_venue\',
                          \'compare\' => \'NOT EXISTS\',
                          ),

                        array(
                          \'relation\' => \'OR\',
                                array(
                                  \'key\'   => \'featured_venue\',
                                  \'value\' => true,
                                ),
                                array(
                                  \'key\'     => \'featured_venue\',
                                  \'value\'   => 0,
                                ),
                        ),
                  ),

);

$query = new WP_Query($args);
我已经在上面查询了名为bars的帖子类型。bar CPT使用ACF通过ACF的True/False复选框使条形图具有特色(https://www.advancedcustomfields.com/resources/true-false/) - ACF正在创建meta key featured\\u场馆。然而,由于ACF字段已添加到现有的帖子中,因此并非所有帖子都有元键。因此,我有以下post状态:

我的目标是首先列出所有场馆并具有特色场馆,然后按字母顺序列出所有其他场馆。但是,我的查询当前给出的结果如下:

按字母顺序排列的特色场馆帖子,带有特色场馆元键=按字母顺序排列的错误帖子,没有按字母顺序排列的特色场馆元键我尝试更改比较值,但未能获得所需的结果。相反,它总是删除带有meta\\u键的帖子,或者删除没有meta\\u键的帖子。

是否可以按我的预期方式修改查询,或者我是否需要将featured\\u venue元键批量添加到所有帖子?

1 个回复
最合适的回答,由SO网友:OriginalEXE 整理而成

这可以通过向ORDER BY 陈述

尝试在通话前添加此内容new WP_Query($args);:

$setDefaultOrderby = function($statement) {
    return str_replace(\'wp_postmeta.meta_value\', "COALESCE(wp_postmeta.meta_value, \'false\')", $statement);
};

add_filter(\'posts_orderby\', $setDefaultOrderby);
之后是:

remove_filter(\'posts_orderby\', $setDefaultOrderby);
更改\'false\' 使用您需要的默认值。

我正在使用COALESCE 这里,它基本上选择了您传递给它的第一个参数NULL, 本质上允许您为没有元键的帖子提供回退。

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post