求助:WordPress5.0后台分类列表停止自动排序的解决方法
解决WordPress 5.0+后台分类列表自动排序问题
你遇到的问题确实是WordPress 5.0引入块编辑器(Gutenberg)后常见的兼容性问题,而且你的旧代码还有个小疏漏——把过滤器(filter)当成动作(action)注册了,这也是它失效的核心原因之一。下面分两种使用场景给你针对性的解决方案:
一、使用经典编辑器的情况
你的原有逻辑是对的,只需要修正注册方式并明确参数个数,修改后的代码如下:
function my_terms_checklist_arg( $args, $post_id = null ) { $args['checked_ontop'] = false; return $args; } add_filter( 'wp_terms_checklist_args', 'my_terms_checklist_arg', 10, 2 );
这段代码会覆盖分类选择列表的默认参数,强制关闭checked_ontop(选中项置顶)功能,在经典编辑器环境下就能完美保持原有分类顺序了。
二、使用块编辑器(Gutenberg)的情况
块编辑器的分类选择器是通过前端React组件渲染的,PHP过滤器无法直接干预,需要用JavaScript修改其排序逻辑:
步骤1:在主题中注册自定义脚本
打开你的主题functions.php文件,添加以下代码,确保脚本只在后台文章编辑页面加载:
function disable_checked_category_top_sort() { // 仅在后台文章编辑页面加载脚本 if ( is_admin() && get_current_screen()->base === 'post' ) { wp_enqueue_script( 'disable-checked-category-sort', get_stylesheet_directory_uri() . '/js/disable-checked-category-sort.js', array( 'wp-blocks', 'wp-element', 'wp-edit-post' ), wp_get_theme()->get('Version'), true ); } } add_action( 'admin_enqueue_scripts', 'disable_checked_category_top_sort' );
步骤2:创建JavaScript逻辑文件
在你的主题目录下新建js文件夹,然后创建disable-checked-category-sort.js文件,写入以下内容:
wp.hooks.addFilter( 'editor.PostTaxonomyType', 'my-theme/disable-checked-category-sort', (OriginalComponent) => { return (props) => { // 跳过默认的"选中项置顶"排序逻辑,直接返回原始分类数组 const sortedTerms = props.terms; return <OriginalComponent {...props} terms={sortedTerms} />; }; } );
这段代码通过Gutenberg的钩子系统,重写了分类组件的排序逻辑,不再将选中分类移到列表顶部,完美保留原始的分类展示顺序。
验证方法
修改完成后,进入后台编辑任意文章,选中某个分类并点击更新,检查分类列表——如果一切正常,分类顺序会和更新前完全一致,不会出现选中项置顶的情况。
内容的提问来源于stack exchange,提问作者abms
相关产品推荐
相关产品推荐

