Как проверить, существует ли админ (под) меню?

В названии говорится все. Я использую WP 3.0.4

Solutions Collecting From Web of "Как проверить, существует ли админ (под) меню?"

Что-то вроде этого должно работать. $handle должен быть пул меню; установите для $sub значение true для подменю поиска (по умолчанию для меню верхнего уровня):

 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; } 

Последнее замечание: это не должно использоваться до того, как будет установлено меню. 'admin_init' – это безопасная ставка для самого раннего времени, чтобы использовать это. Я также добавил некоторый код, чтобы оставить изящно, если меню не установлены.

Вот более простой способ сделать это:

 global $submenu; $main_menu = 'my_menu_slug'; if ( isset( $submenu[ $main_menu ] ) && in_array( 'my_submenu_slug', wp_list_pluck( $submenu[ $main_menu ], 2 ) ) ) { // Submenu exists. } else { // Submenu doesn't exist. } 

Милая! и здесь я думал, что я был единственным сумасшедшим человеком, который хотел сделать что-то подобное!

Ну, в зависимости от того, что я думаю, что вы хотите (что-то похожее на то, что я разместил здесь ), тогда вот решение, которое я придумал (воспользовавшись приведенной выше функцией)

Первоначально я думал, что мне нужно будет проверить, кто из моих плагинов был активен каждый раз, когда был активирован новый плагин.

Я is_plugin_active() что использую is_plugin_active() чтобы увидеть, какие пункты меню отображаются под основным «основным» пунктом меню … Однако это оказалось сложнее, чем я думал, потому что эта функция еще не активирована, когда плагин получает доступ к файлу, в котором все это будет.

К счастью, он оказался настолько простым, что все время смотрел мне в лицо … Каждый активированный плагин может просто добавить подменю этого плагина в родительское меню, не беспокоясь о проверке наличия других активных плагинов. ,

Я добавил это к каждому из плагинов «Мой» (ака, плагины, выпущенные моей компанией)

 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'); } не 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'); } 

Просто измените это для каждого из плагинов, которые вы хотите добавить под одним элементом меню, и вставьте плагин соответствующей модифицированной версии в каждый из соответствующих плагинов.

Вот хороший способ сделать это без всех этих условностей и циклов foreach.

 function submenuExists($submenuTitle) { global $submenu; return count(array_filter($submenu['plugins.php'], function($submenuPage) use ($submenuTitle) { return $submenuPage[0] == submenuTitle; } )) > 0; }