我正在尝试订购带有自定义元字段的产品帖子类型,以确定过期日期。
我想展示所有即将到期的产品(首先是即将到期的产品)。在它们之后,我想按字母顺序显示所有剩余的过期日期为空或缺失的产品。
我有这个pre_get_post
挂钩:
$meta_query = array(
\'relation\' => \'OR\',
array(
\'key\' => \'expiring_date\',
\'value\' => date(\'Ymd\'),
\'compare\' => \'>\',
\'type\' => \'DATE\'
),
array(
\'key\' => \'expiring_date\',
\'compare\' => \'NOT EXISTS\'
),
array(
\'key\' => \'expiring_date\',
\'value\' => \'\'
),
);
$query->set( \'meta_query\', $meta_query );
$query->set(\'meta_key\', \'expiring_date\');
$query->set(\'orderby\', array(
\'meta_value_num\' => \'ASC\',
\'title\' => \'ASC\'
));
问题是WordPress总是显示过期的产品
after 缺少日期的产品。更改
meta_value_num
到
DESC
按原样将它们放在最前面,但它们是从最晚到期到最快订购的。
有什么帮助吗?
SO网友:swissspidy
您应该能够对元查询子句进行如下命名和排序:
$meta_query = array(
\'relation\' => \'OR\',
\'foo\' => array(
\'key\' => \'expiring_date\',
\'value\' => date(\'Ymd\'),
\'compare\' => \'>\',
\'type\' => \'DATE\'
),
\'bar\' => array(
\'key\' => \'expiring_date\',
\'compare\' => \'NOT EXISTS\'
),
\'baz\' => array(
\'key\' => \'expiring_date\',
\'value\' => \'\'
),
);
$query->set( \'meta_query\', $meta_query );
$query->set(\'meta_key\', \'expiring_date\');
$query->set(\'orderby\', array(
\'foo\' => \'ASC\',
\'bar\' => \'DESC\',
\'baz\' => \'ASC\',
\'title\' => \'DESC\'
));
更多信息请参见
introduction post.