我有以下代码,它运行良好,并使用 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');