按元值和发布日期对帖子进行排序

时间:2017-09-30 作者:Ehsan

我想通过名为“sort\\u date”的元键来订购WP帖子,如果它不存在,应该使用帖子的发布日期来订购帖子。

下面是我当前使用的代码

            function pre_get_posts_custom($wp_query) { 



              if ( !is_admin() && $wp_query->is_main_query() && !is_page() )
                {
                    $meta_key = \'sort_date\';
                    $wp_query->set( \'post_type\', array( \'post\', \'article\' ) );  
                    $wp_query->set( \'meta_type\', \'DATE\' );  
                    $wp_query->set(\'meta_query\', array(
                        \'relation\' => \'OR\',
                        array(
                            \'key\'     => $meta_key,
                            \'compare\' => \'NOT EXISTS\',
                        ),
                        array(
                            \'relation\' => \'OR\',
                            array(
                                \'key\'   => $meta_key,
                                \'value\' => \'on\',
                            ),
                            array(
                                \'key\'     => $meta_key,
                                \'value\'   => \'on\',
                                \'compare\' => \'!=\',
                            ),
                        ),
                    ));
                    $wp_query->set( \'orderby\', array( \'meta_value\' => \'DESC\', \'date\' => \'DESC\' ) );

                }
            }
            add_filter(\'pre_get_posts\', \'pre_get_posts_custom\' );
上面的代码首先显示具有“sort\\u date”元键的帖子,然后显示没有元键值的所有帖子。

例如

帖子A:具有元键值2016-9-28

帖子B:没有元密钥。。。发布日期为2017年6月15日

上面的代码使帖子A首先出现,我希望帖子B首先出现,因为它有最近的日期。我希望元键值和发布日期作为一个整体工作,而不是将两者单独排序。

1 个回复
SO网友:lukgoh
\'orderby\' => \'date meta_value_num\', 
\'meta_key\'  => $meta_key,
\'order\' => \'DESC\'
结束

相关推荐

WP_QUERY ORDERBY已修改为包含自定义元更改

我有一个自定义的post类型,其中包含一组自定义的meta值。我想显示一个列表,显示最近修改的10篇文章。我的查询参数如下所示$args = array( \'post_type\' => array( \'post_type_harmonic\' ), \'posts_per_page\' => \'10\', \'orderby\' => \'modified\',