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

WordPress写文章时隐藏子分类?自定义代码未生效求助

问题分析与修复方案

原代码的核心问题

  1. DOM结构判断错误:WordPress分类列表中,子分类的复选框嵌套在class="children"的<ul>容器里,而非复选框的父元素(<label>)拥有children类;主分类的判断逻辑也有误,主分类的<li>才带有category类,不是复选框的父元素。
  2. 子分类匹配逻辑错误:子分类的value是自身独立ID,并非主分类ID的前缀,用value^=无法关联到对应的子分类。
  3. 路径可能不兼容:如果使用子主题,get_template_directory_uri()指向父主题路径,会导致脚本无法正确加载。

修复后的代码

1. 修正后的hide-subcategories.js

jQuery(document).ready(function($) {
    // 初始隐藏所有子分类容器
    $('#categorychecklist .children').hide();

    // 监听主分类复选框的状态变化
    $('#categorychecklist li.category > label > input[type="checkbox"]').change(function() {
        var $mainCatItem = $(this).closest('li.category');
        var $subCatContainer = $mainCatItem.find('.children');
        
        // 选中主分类时显示子分类,取消选中时隐藏并清空子分类选中状态
        if ($(this).is(':checked')) {
            $subCatContainer.show();
        } else {
            $subCatContainer.find('input[type="checkbox"]').prop('checked', false);
            $subCatContainer.hide();
        }
    });
});

2. 修正脚本入队代码(functions.php)

如果使用子主题,替换get_template_directory_uri()为get_stylesheet_directory_uri(),同时限制脚本仅在文章/页面编辑页加载:

function enqueue_hide_subcategories_script() {
    $currentScreen = get_current_screen();
    // 仅在文章或页面编辑页面加载脚本
    if ($currentScreen->base === 'post' || $currentScreen->base === 'page') {
        wp_enqueue_script(
            'hide-subcategories',
            get_stylesheet_directory_uri() . '/js/hide-subcategories.js',
            array('jquery'),
            '1.0',
            true
        );
    }
}
add_action('admin_enqueue_scripts', 'enqueue_hide_subcategories_script');

额外验证步骤

  • 确认hide-subcategories.js文件路径正确:子主题目录下的js文件夹中存在该文件。
  • 打开浏览器开发者工具(F12),查看「控制台」标签是否有脚本加载或语法错误。
  • 检查「网络」标签,确认hide-subcategories.js已成功加载(状态码200)。

内容的提问来源于stack exchange,提问作者omar baradia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:52:47