含糖的在这里,我以为我是唯一一个想做这种事的疯子!
嗯,基于我认为你想要的(类似于我发布的内容here), 下面是我提出的解决方案(利用上面给出的函数)
起初,我认为每次激活一个新插件时,我必须检查哪些插件处于活动状态。
我想我会用is_plugin_active()
要查看要在父“main”菜单项下显示的菜单项。。。然而,这比我想象的要困难,因为当插件访问所有这些内容所在的文件时,该函数尚未激活。
谢天谢地,事情变得如此简单,以至于一直盯着我的脸。。。每个被激活的插件都可以简单地将该插件的子菜单添加到父菜单,而无需担心是否存在其他活动插件。。。
我将此添加到每个“我的”插件中(即我的公司发布的插件)
if(!function_exists(\'find_my_menu_item\')) {
function find_my_menu_item($handle, $sub = false) {
if(!is_admin() || (defined(\'DOING_AJAX\') && DOING_AJAX)) {
return false;
}
global $menu, $submenu;
$check_menu = $sub ? $submenu : $menu;
if(empty($check_menu)) {
return false;
}
foreach($check_menu as $k => $item) {
if($sub) {
foreach($item as $sm) {
if($handle == $sm[2]) {
return true;
}
}
}
else {
if($handle == $item[2]) {
return true;
}
}
}
return false;
}
}
然后,我在每个插件中添加了以下小片段:
if(!function_exists(\'wpg_add_parent_page\')) {
function wpg_add_parent_page() {
if(!find_my_menu_item(\'main_item_slug\')) {
add_menu_page(\'Main Item Page Title\',\'Main Item Menu Title\', \'activate_plugins\', \'main_item_slug\', \'main_item_function\', THISPLUGIN_PATH.\'images/menu-icon.png\');
}
if(!function_exists(\'remove_submenu_page\')) {
unset($GLOBALS[\'submenu\'][\'main_item_slug\'][0]);
}
else {
remove_submenu_page(\'main_item_slug\',\'main_item_slug\');
}
}
add_action(\'admin_menu\', \'wpg_add_parent_page\');
}
if(!function_exists(\'wpg_add_thisplugin_page\')) {
function wpg_add_thisplugin_settings_page() {
add_submenu_page(\'main_item_slug\', \'ThisPlugin Settings\', \'ThisPlugin Menu Item\', \'activate_plugins\', \'this_plugin_slug\', \'wpg_thisplugin_function\');
}
add_action(\'admin_menu\', \'wpg_add_thisplugin_page\');
}
只需在一个菜单项下为您想要添加的每个插件修改它,并在每个相关插件中插入相应的修改版本。