You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:38:57