php - ACF/Wordpress:在前端按多个 values 对帖子列表进行排序

我有以下代码,它运行良好,并使用 ACF 插件根据分配给每个帖子的自定义字段对帖子进行排序。这是用于此目的的代码

function my_pre_get_posts( $query ) {


// only modify queries for 'event' post type
if( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'post' ) {
    
    $query->set('order', 'ASC'); 
    $query->set('orderby', 'meta_value');    
    $query->set('meta_key', 'active_inactive');    
    
}

// return
return $query;

}

add_action('pre_get_posts', 'my_pre_get_posts');

我有一个使用 ACF 创建的自定义字段,称为 active_inactive,每个帖子都有 2 个 values,活跃和不活跃。

第一个要求工作正常,所有活动帖子首先显示在列表中,然后是非活动帖子,但是,dates 没有正确排序,并且在活动帖子之后,所有非活动帖子首先从旧的 date 排序最后到 date 结束。

所以我也需要修复 dates,所以在活动帖子列表结束并且非活动帖子开始后,所有这些非活动帖子应该从最新的 date 到最旧的 date 开始。

任何帮助,将不胜感激。

回答1

尝试类似的方法,但由于 post_date 而没有返回任何结果

function my_pre_get_posts( $query ) {

if( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'post' ) {
    
    $meta_query = array(
        'active_inactive' => array(
            'key' => 'active_inactive',
            'compare' => 'EXISTS'
        ),
        'post_date' => array(
            'key' => 'post_date',
            'compare' => 'EXISTS'
        ),
    );
    $order_by = array(
        'active_inactive' => 'ASC',
        'post_date' => 'DESC'
    );
    
    $query->set( 'meta_query', $meta_query );
    $query->set( 'orderby', $order_by );
    $query->set( 'posts_per_page', -1 );
 }
}
add_action( 'pre_get_posts', 'my_pre_get_posts' );

回答2

function my_pre_get_posts($query)
    {
        if (isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'post')
        {
            $meta_query = array(
                'active_inactive' => array(
                    'key' => 'active_inactive',
                    'compare' => 'EXISTS'
                ),
                'modified' => array(
                    'key' => 'modified',
                    'type' => 'date',
                    'compare' => 'EXISTS'
                ),
            );
            $order_by = array(
                'active_inactive' => 'ASC',
                'modified' => 'DESC'
            );
            $query->set('meta_query', $meta_query);
            $query->set('orderby', $order_by);
        }
        else
        {
            $meta_query = array(
                'active_inactive' => array(
                    'key' => 'active_inactive',
                    'compare' => 'EXISTS'
                ),
                'modified' => array(
                    'key' => 'modified',
                    'type' => 'date',
                    'compare' => 'EXISTS'
                ),
            );
            $order_by = array(
                'active_inactive' => 'ASC',
                'modified' => 'DESC'
            );
            $query->set('meta_query', $meta_query);
            $query->set('orderby', $order_by);
        }
    }

    add_action('pre_get_posts', 'my_pre_get_posts');

相似文章

随机推荐

最新文章