按自定义元日期后发布日期排序的多种发布类型的WP查询

时间:2016-04-07 作者:CreativeFlair

两种帖子类型blog和events。我想在同一查询中列出事件,但按事件日期排序,按发布日期排序博客:

                    $args = array(
                      \'post_type\' => array( \'post\', \'event\' ),
                      \'posts_per_page\' => \'-1\',
                    \'meta_query\' => array(
                        array(
                            \'key\' => \'event_start_date\',
                            \'compare\' => \'>\'
                        )
                    ),
                    \'orderby\' => \'event_start_date post_date\',
                    \'order\' => \'ASC\'
                    );
                    query_posts($args);
以上内容不显示博客帖子。

2 个回复
SO网友:Rarst

您不太可能实现上述目标。WordPress在查询中没有post子集的概念,它只将其理解为结果的单个集合。

如果不需要分页,只需检索未排序的集合,然后用PHP代码重新排序即可。如果您确实需要分页,这可能会非常不方便,并且需要大量自定义SQL。

PS避免query_posts(), 它过时了,而且有害。

SO网友:Milo

这未经测试,但您可以尝试EXISTS OR NOT EXISTS meta_query:

$args = array(
    \'post_type\' => array( \'post\', \'event\' ),
    \'posts_per_page\' => \'-1\',
    \'meta_query\' => array(
        \'relation\' => \'OR\',
        array(
            \'key\' => \'event_start_date\',
            \'compare\' => \'EXISTS\'
        ),
        array(
            \'key\' => \'event_start_date\',
            \'compare\' => \'NOT EXISTS\'
        )
    ),
    \'orderby\' => array(
        \'meta_value_num\' => \'ASC\',
        \'post_date\' => \'ASC\'
    )
);

相关推荐

如何在WooCommerce_Account_Orders函数中传递$CURRENT_PAGE?

woocommerce功能woocommerce_account_orders($current_page) 已调用1个参数$current_page. 该函数通过调用woocommerce_account_orders_endpoint 通过以下挂钩-add_action( \'woocommerce_account_orders_endpoint\', \'woocommerce_account_orders\' );然而,在上述挂钩中,$current_page 未在函数中作为参数传递。情况如何$c