WP查询-首先按元字段对帖子进行排序,然后对其余帖子进行排序

时间:2018-02-08 作者:Ziik

我正在尝试订购带有自定义元字段的产品帖子类型,以确定过期日期。

我想展示所有即将到期的产品(首先是即将到期的产品)。在它们之后,我想按字母顺序显示所有剩余的过期日期为空或缺失的产品。

我有这个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_numDESC 按原样将它们放在最前面,但它们是从最晚到期到最快订购的。

有什么帮助吗?

1 个回复
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.

结束