是否按元键排序与搜索条件不同?

时间:2014-06-27 作者:Bysander

我创建了一个管理员专用页面,只是为了查看有关我网站订阅者的更多信息。订阅存储为自定义帖子类型。

我只想做一个条件,查找已取消订阅者的列表,并在订阅到期前订购。订阅到期日存储为yyyymmdd,作为post上的元标记。

关于这一点有几页,但我无法找到任何解决方案,这可能是因为我在做一些愚蠢的事情。

我试过的两种方法是:

     $args=array(
            \'post_type\' => \'subscription\',
            \'post_status\' => \'publish\',
            \'meta_key\' => \'expiry\',
            \'orderby\' => \'meta_value_num\',
            \'order\' => \'DESC\',
            \'posts_per_page\' => -1,
            \'caller_get_posts\'=> 1,
            \'meta_query\' => array(
                                  array(
                                        \'key\' => \'paypal_recur_profile_status\',
                                        \'value\' => get_post_meta(get_the_ID(),\'cancelled\',true),
                                        \'compare\' => \'=\'
                                        )

                                  ),
            );
以及

 $args=array(
        \'post_type\' => \'subscription\',
        \'post_status\' => \'publish\',
        \'meta_key\' => array(\'paypal_recur_profile_status\', \'expiry\'),
        \'meta_value\' => \'Cancelled\',
        \'orderby\' => \'expiry\'
        \'order\' => \'DESC\',
        \'posts_per_page\' => -1,
        \'caller_get_posts\'=> 1,
        );
第一个没有返回任何内容,第二个似乎没有问题,但有一些异常,因此假设它最终按post编号排序,而其他正确的排序结果是一致的。

有人能在这里发现这个非故意的错误吗?或者这仅仅是实现我想要做的事情的错误方式吗?

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

的值value 元查询中的键可能是问题的原因。

 \'value\' => get_post_meta( get_the_ID(), \'cancelled\', true )
Theget_post_meta 调用实际上检索当前帖子的元键“已取消”的值。所以,在你现在WP_Query, 您正在检索具有paypal_recur_profile_status 等于当前帖子的自定义字段“已取消”的值。

如果您想获取配置文件状态为的帖子Cancelled, 你应该检查一下value 要“取消”:

$args = array(
    \'post_type\' => \'subscription\',
    \'post_status\' => \'publish\',
    \'meta_key\' => \'expiry\',
    \'orderby\' => \'meta_value_num\',
    \'order\' => \'DESC\',
    \'posts_per_page\' => -1,
    \'ignore_sticky_posts\'=> 1,
    \'meta_query\' => array(
        array(
            \'key\' => \'paypal_recur_profile_status\',
            \'value\' => \'Cancelled\'
        )
    )
);
此外,caller_get_posts 已替换为ignore_sticky_posts 在WordPress 3.1中(我已经替换了它),您可以省略compare 输入meta_query, 就这样= 默认情况下。

结束

相关推荐

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

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