php WordPress查询顺序由两个键依赖

9gm1akwq  于 2023-01-29  发布在  PHP
关注(0)|答案(1)|浏览(128)

我按自定义字段start_date(表单类型Ymd)对查询进行排序。排序应该始终是从新到旧的降序。如果某一天有多个日期条目,则这些条目应该按发布顺序排序。
我尝试了它与(后)日期,id,menu_order,但它从来没有在所有情况下工作。
start_date可能与过帐日期不同。
有没有查询的方式?
还是必须在news_start_date字段中添加小时和分钟?
或者可能切换到后日期全部,但这意味着在这个后端流一个优雅的大损失。

$meta_query = array(
    'relation' => 'AND',
    array(
        'key'     => 'news_start_date',
        'value'   => $today,
        'compare' => '<=',
        'type'    => 'DATE'
    ),
    array(
         'relation' => 'OR', 
         
        array ( 
            'relation' => 'AND', 
                array(
                    'key'     => 'news_start_date',
                    'value'   => $expire_date,
                    'compare' => '>=',
                    'type'    => 'DATE'
                ),
                array(
                    'key'     => 'news_end_date',
                    'compare' => 'NOT EXISTS'
                 ),      
        ),  
         
        array ( 
            'relation' => 'AND', 
            array(
                'key'     => 'news_end_date',
                'compare' => 'EXISTS'
             ), 
            array(
                'key'     => 'news_end_date', 
                'value'   => $today,
                'compare' => '>=',
                'type'    => 'DATE'
            ),           
        ),  
    ),            
);
$args = array(
    'post_type' => 'news',
    'meta_query' => $meta_query, 
    'posts_per_page' => $news_count,
    'meta_key' => 'news_start_date',
    'orderby' => 'meta_value',
    'orderby' => array(
        'meta_value' => 'DESC',     
        'ID' => 'DESC',
        //'menu_order' => 'DESC',
        //'date' => 'DESC',
        //'publish_date' => 'DESC',
    ),
    'order' => 'DESC', 
    'post__not_in' => $sticky_posts, 
    'ignore_sticky_posts' => true,
    'cache_results' => true, 
    'update_post_meta_cache' => true, 
    'no_found_rows' => true, 
    'suppress_filters' => false,
 );

我尝试了其他字段,但从来没有一个100%正确的顺序

zujrkrfu

zujrkrfu1#

向查询args添加第二个orderby参数,其中第一个orderbymeta_value,第二个orderby为ID。这将首先按news_start_date字段对结果进行排序,然后按ID字段(表示发布顺序)作为辅助排序选项进行排序。
您可以通过向查询参数中添加以下行来完成此操作:

'orderby' => array(
'meta_value' => 'DESC',
'ID' => 'DESC',
),

查询结果将首先按“news_start_date”降序排序,然后按“ID”降序排序,这将按您想要的顺序给予结果。

相关问题