显示按两个自定义字段排序的两种帖子类型

时间:2017-10-24 作者:Iurie

我有两个自定义的帖子类型,由两个第三方插件创建,我想通过主查询显示在一个常见的有序列表中。它们必须按两个不同的自定义字段排序,但具有相同的信息-事件开始日期,以相同的格式“Y-m-d”存储。下面是我的代码,但它不能按预期的方式工作-首先显示事件类型的帖子,但以任意无序的方式显示,然后按预期的方式显示facebook\\u事件类型的帖子。我如何解决这个问题?

function add_custom_post_type_to_query( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'post_type\', array( \'post\', \'facebook_events\', \'event\' ) );
        $query->set( \'meta_query\', array(
            \'relation\' => \'OR\',
            array(
                array(
                    \'key\' => \'event_start_date\', //this is from facebook_events post type
                    \'value\' => date_i18n("Y-m-d"),
                    \'compare\' => \'>=\',
                    \'type\' => \'DATE\',
                )
            ),
            array(
                \'key\' => \'_event_start_date\', //this is from event post type
                \'value\' => date_i18n("Y-m-d"),
                \'compare\' => \'>=\',
                \'type\' => \'DATE\',
            )
        ) );
        $query->set( \'orderby\', \'meta_value\' );
        $query->set( \'order\', \'ASC\' );
    }
}
add_action( \'pre_get_posts\', \'add_custom_post_type_to_query\' );

UPDATE

我有一个启发!我发现我的代码哪里错了,看看我的答案。

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

我的旧代码错了,这是一个好代码,正如我所想:

function add_custom_post_type_to_query( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'post_type\', array( \'post\', \'facebook_events\', \'event\' ) );
        $query->set( \'meta_query\', array(
            \'relation\' => \'OR\',
            array(
                \'key\' => \'event_start_date\', //this is from facebook_events post type
                \'value\' => date_i18n("Y-m-d"),
                \'compare\' => \'>=\',
                \'type\' => \'DATE\',
            ),
            array(
                \'key\' => \'_event_start_date\', //this is from event post type
                \'value\' => date_i18n("Y-m-d"),
                \'compare\' => \'>=\',
                \'type\' => \'DATE\',
            )
        ) );
        $query->set( \'orderby\', \'meta_value\' );
        $query->set( \'order\', \'ASC\' );
    }
}
add_action( \'pre_get_posts\', \'add_custom_post_type_to_query\' );

UPDATE

Here 您将找到更好的解决方案,因为它用于排序时间戳,不仅包括日期,还包括时间。

结束