如何在wp-admin/customize.php中限制WordPress菜单最大深度?
限制WordPress自定义器(customize.php)中的菜单深度
可以通过两种可靠的方式实现,无需直接修改核心文件:
方法一:使用PHP钩子(推荐)
WordPress提供了nav_menu_item_depth_limit过滤器,能直接限制菜单的最大深度,这是最稳定的方案,不会因核心更新失效。
在主题的functions.php或自定义插件中添加以下代码:
add_filter( 'nav_menu_item_depth_limit', 'custom_limit_nav_menu_depth', 10, 2 ); function custom_limit_nav_menu_depth( $depth_limit, $menu_id ) { // 将3改为你需要的最大深度(比如2表示最多两级菜单) return 3; }
这个钩子会全局限制所有导航菜单的可设置深度,包括自定义器中的菜单编辑。
方法二:修改JS变量(针对自定义器界面)
你找到的wpNavMenu.options.menuItemDepthPerLevel确实控制自定义器中菜单的层级显示,但直接修改核心JS文件不可取,应该通过后台加载自定义JS来覆盖这个变量:
- 先在主题或插件中创建一个JS文件(比如
customize-nav-menu-depth.js),内容如下:
jQuery(document).ready(function($) { // 等待自定义器菜单组件加载完成 $(document).on('ready', function() { if (typeof wpNavMenu !== 'undefined' && wpNavMenu.options) { // 设置每个层级的最大深度,这里设为2(即最多允许两级子菜单) wpNavMenu.options.menuItemDepthPerLevel = 2; } }); });
- 然后在
functions.php中添加代码,将这个JS文件加载到自定义器页面:
add_action( 'customize_controls_enqueue_scripts', 'enqueue_custom_menu_depth_script' ); function enqueue_custom_menu_depth_script() { wp_enqueue_script( 'custom-menu-depth', get_stylesheet_directory_uri() . '/customize-nav-menu-depth.js', // 替换为你的JS文件路径 array( 'jquery', 'customize-nav-menus' ), // 依赖核心的自定义菜单JS wp_get_theme()->get('Version'), true ); }
注意:这种方法只修改自定义器界面的交互限制,建议配合方法一的PHP钩子,确保前端输出的菜单也遵守深度限制。
内容的提问来源于stack exchange,提问作者Georgie
相关产品推荐
相关产品推荐

