EDIT: 由于公开悬赏,我无法删除我的问题,但问题似乎是由我安装的“Post Types Order”插件引起的。我已将其设置为非顺序news
post类型,但出于某种原因,它仍将其排序添加到主查询中。这是我的错误,在调试问题时应该始终禁用插件。
我正在尝试为自定义帖子类型设置列的默认排序news
. 单击标题时,列的排序很好,但当您第一次访问帖子列表时,它将仅按默认排序(发布日期)进行排序。这是我的pre_get_posts
措施:
add_action( \'pre_get_posts\', function( $query ) {
global $pagenow;
if ( !is_admin() || $pagenow !== \'edit.php\' )
return;
$post_type = $query->get( \'post_type\' );
$order_by = $query->get( \'orderby\' );
if ( $post_type == \'news\' ) {
if ( empty( $order_by ) )
$order_by = \'news-date\';
switch ( $order_by ) {
case \'news-date\':
$query->set( \'meta_key\', \'date\' );
$query->set( \'orderby\', \'meta_value_num\' );
break;
}
}
} );
通过单击标题手动排序后,URL变为edit.php?post_type=news&orderby=news-date&order=asc
所以我确信我所有的参数都匹配。我尝试添加var_dump( $query );
在设置查询后的switch语句中,查询包括更新的meta_key
和orderby
值,因此我假设查询被正确修改,但它仍在执行默认排序。
我想也许date
由于某种原因(可能是插件)已经使用了meta键,所以我检查了wp_postmeta
数据库中的表,但只有名为date
是用ACF日期选择器设置的值,所以那里一切都很好。
希望我错过的只是一些愚蠢的东西。