我创建了一个管理员专用页面,只是为了查看有关我网站订阅者的更多信息。订阅存储为自定义帖子类型。
我只想做一个条件,查找已取消订阅者的列表,并在订阅到期前订购。订阅到期日存储为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编号排序,而其他正确的排序结果是一致的。
有人能在这里发现这个非故意的错误吗?或者这仅仅是实现我想要做的事情的错误方式吗?
最合适的回答,由SO网友:engelen 整理而成
的值value
元查询中的键可能是问题的原因。
\'value\' => get_post_meta( get_the_ID(), \'cancelled\', true )
The
get_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
, 就这样
=
默认情况下。