更新:修改WordPress后台页面默认排序规则
WordPress后台页面默认按日期降序排序的解决方案
一、解决层级保留问题
当前代码仅修改了排序字段,但WordPress后台页面列表默认开启了层级显示(hierarchical=true),导致顶级页面和子页面仍按层级分组排序,和手动URL参数的效果不一致。要实现和手动参数相同的无层级按日期排序,需在查询中关闭层级显示:
修改pre_get_posts钩子函数,添加hierarchical参数设置:
function set_post_order_in_admin( $wp_query ) { global $pagenow; // 仅针对后台页面列表,且未手动指定排序字段时生效 if ( is_admin() && 'edit.php' == $pagenow && $wp_query->get('post_type') === 'page' && !isset($_GET['orderby'])) { $wp_query->set( 'orderby', 'date' ); $wp_query->set( 'order', 'DESC' ); // 关闭层级显示,让所有页面统一按日期排序 $wp_query->set( 'hierarchical', false ); } } add_filter('pre_get_posts', 'set_post_order_in_admin', 5 );
二、解决表头排序列高亮问题
后台列表的排序高亮列由list_table_primary_column钩子控制,我们需要在未手动指定排序时,将日期列设为主排序列,让其显示sorted类:
function set_page_list_primary_column($primary_column, $screen) { // 仅针对页面列表页面,且未手动指定排序字段时生效 if ($screen->id === 'edit-page' && !isset($_GET['orderby'])) { return 'date'; } return $primary_column; } add_filter('list_table_primary_column', 'set_page_list_primary_column', 10, 2);
完整代码
将两段代码添加到主题的functions.php文件或自定义插件中即可:
// 设置后台页面默认按日期降序排序,关闭层级显示 function set_post_order_in_admin( $wp_query ) { global $pagenow; if ( is_admin() && 'edit.php' == $pagenow && $wp_query->get('post_type') === 'page' && !isset($_GET['orderby'])) { $wp_query->set( 'orderby', 'date' ); $wp_query->set( 'order', 'DESC' ); $wp_query->set( 'hierarchical', false ); } } add_filter('pre_get_posts', 'set_post_order_in_admin', 5 ); // 设置日期列为默认排序高亮列 function set_page_list_primary_column($primary_column, $screen) { if ($screen->id === 'edit-page' && !isset($_GET['orderby'])) { return 'date'; } return $primary_column; } add_filter('list_table_primary_column', 'set_page_list_primary_column', 10, 2);
内容的提问来源于stack exchange,提问作者Jakub Simek
相关产品推荐
相关产品推荐

