要通过函数禁止某些插件在WordPress后台添加左侧菜单或屏蔽插件左侧菜单,可以在 functions.php 文件中使用 remove_menu_page() 或 remove_submenu_page() 函数。
一、禁用插件添加的顶级菜单
如果某个插件在后台的左侧菜单中添加了顶级菜单项,可以使用 remove_menu_page() 函数来移除。例如,假设插件在后台菜单中添加了一个名为“WP Mail SMTP”的菜单项,你可以通过其菜单的 slug 来移除它:
add_action('admin_menu', function() {
remove_menu_page('wp-mail-smtp'); // 使用实际菜单的slug
});
二、禁用插件添加的子菜单
如果插件添加了子菜单,你可以使用 remove_submenu_page() 函数来移除。比如移除“设置”菜单下的子菜单:
add_action('admin_menu', function() {
remove_submenu_page('options-general.php', 'wp-mail-smtp'); // 'options-general.php' 是“设置”菜单的slug,后面的参数是子菜单的slug
});
三、如何找到菜单的 slug
要找到插件菜单或子菜单的 slug,你可以通过以下几种方法:
开发者工具:在浏览器中使用开发者工具(F12)检查菜单项,找到与之对应的链接。通常链接中的最后一部分是菜单的 slug。例如,URL 可能是 example.com/wp-admin/admin.php?page=wp-mail-smtp,那么 wp-mail-smtp 就是这个菜单的 slug。
查看插件源码:如果插件文档没有明确说明菜单的 slug,你也可以查看插件源码,搜索 add_menu_page() 或 add_submenu_page() 函数调用的位置,找到菜单项的 slug。
示例:禁止多个插件的菜单
如果你想同时禁用多个插件的菜单,可以将它们的 slug 一一列出:
add_action('admin_menu', function() {
// 禁用多个插件的顶级菜单
remove_menu_page('wp-mail-smtp');
remove_menu_page('another-plugin-slug');
// 禁用多个插件的子菜单
remove_submenu_page('options-general.php', 'wp-mail-smtp');
remove_submenu_page('tools.php', 'another-plugin-submenu');
});
四、菜单的 slug 是指什么?Url还是名字?
在WordPress中,菜单的 slug 是指插件或页面在后台管理界面中使用的唯一标识符,它通常是一个字符串,用于在后台菜单中标记特定的页面或功能。这个 slug 既不是菜单的名字,也不完全是 URL,而是 URL 中的一部分,通常用来唯一标识这个菜单项或页面。
1. 菜单 slug 与 URL 的关系
菜单的 slug 通常出现在后台菜单项的 URL 中,具体位置是 ?page= 或者 admin.php?page= 后面的部分。
例如:
当你在后台点击一个插件的菜单项时,URL 可能看起来像这样:https://example.com/wp-admin/admin.php?page=wp-mail-smtp
这里的 wp-mail-smtp 就是菜单的 slug。
2. 找到菜单 slug
有几种方法可以找到一个插件菜单的 slug:
方法一:通过浏览器开发者工具
进入 WordPress 后台,找到你想移除的菜单。
右键点击该菜单,然后选择“检查”或“Inspect”来打开浏览器的开发者工具。
找到菜单链接的 href 属性,它的值通常是类似 admin.php?page=wp-mail-smtp 这样的 URL,page= 后面的部分就是该菜单的 slug(例如 wp-mail-smtp)。
方法二:通过查看 URL
直接点击后台菜单项,查看浏览器地址栏中的 URL。
URL 通常会类似于 https://example.com/wp-admin/admin.php?page=plugin-slug。
page= 后面的部分就是菜单的 slug。
方法三:通过插件源码
在某些情况下,你也可以查看插件的代码。插件的菜单是通过 add_menu_page() 或 add_submenu_page() 函数添加的,slug 是这些函数的一个参数。
3. 示例
假设你有一个插件,它在后台创建了一个名为“WP Mail SMTP”的菜单项,点击该菜单项后,浏览器的 URL 是:
https://example.com/wp-admin/admin.php?page=wp-mail-smtp
那么在这个 URL 中,wp-mail-smtp 就是这个菜单的 slug,你可以使用它来移除这个菜单项:
add_action('admin_menu', function() {
remove_menu_page('wp-mail-smtp');
});
五、为什么有的管用有的不管用
这里可能涉及几个原因:
1. 菜单项的加载时机
有些插件的菜单项可能会在 admin_menu
钩子之后加载,导致 remove_menu_page
无法正常生效。解决方法是使用 admin_init
钩子或提高 admin_menu
钩子的优先级来确保在菜单加载完成后执行移除操作。
你可以尝试将钩子改为 admin_init
,或者在 admin_menu
钩子中使用更高的优先级:
add_action('admin_menu', function() {
remove_menu_page('stk-custom-fields');
remove_menu_page('wpforms-overview');
remove_menu_page('elementskit');
remove_menu_page('wp-mail-smtp');
}, 99); // 提高优先级
或者尝试使用 admin_init
:
add_action('admin_init', function() {
remove_menu_page('elementskit');
remove_menu_page('wp-mail-smtp');
});
2. 插件的菜单项位置
有些插件可能将菜单项注册为子菜单,而不是顶级菜单,因此你需要使用 remove_submenu_page
来移除它们。你可以查看插件代码或通过浏览器的开发者工具检查具体的菜单层次。
例如,如果 wp-mail-smtp
是 options-general.php
的子菜单,你可以这样写:
remove_submenu_page('options-general.php', 'wp-mail-smtp');
同理,elementskit
可能也是其他顶级菜单下的子菜单,你可以查看其顶级菜单是什么,调整代码。
3. 确认插件菜单的 slug
虽然你检查过 slug
,但还是建议进一步确认。例如,可以在浏览器开发者工具中查看菜单链接的 href
属性,获取确切的 slug
。
总结:
- 尝试提高
admin_menu
的优先级或改为admin_init
钩子。 - 检查插件是否将菜单作为子菜单注册,必要时使用
remove_submenu_page
。 - 再次确认菜单的
slug
,确保和代码中的一致。
你可以根据这些步骤来进一步排查问题,应该能解决菜单无法移除的问题。