Intereting Posts
Как создать html-блок для отображения дополнительной информации на странице одного продукта woocommerce Разделение одного большого сайта WordPress на несколько небольших сайтов Сообщение об ошибке WordPress? Программно добавленный атрибут автоматически устанавливается на страницу «показывать на странице продукта». Woocommerce Любой способ добавить -1 суффикс в конец каждого нового сообщения? Установка WordPress с сайта live на localhost Как написать простые вычисления с помощью пользовательских полей в цикле? Все содержимое моей страницы WordPress исчезло Почему наш редактор сообщений застревает в cols = 40? Невозможно использовать get_header () вызвать проблему (позже)? Можно ли включить HTML-файл с плоским файлом внутри темы WordPress? WPDB обновляет строку с помощью! = In where clause Добавить класс post в пользовательский цикл (WP_QUERY) Можем ли мы создать функцию function.php собственной темы? Добавить различные пользовательские маркеры для разных типов сообщений в API карт Google

Добавление меню администратора или подменю в зависимости от условий

У меня есть два плагина в двух разных файлах, которые добавляют подменю (заголовок плагина) к панели администратора следующим образом:

Плагин 1:

function myplugin1_setup_submenu(){ add_submenu_page("mybrand", "My Plugin1", "My Plugin1", 0, "myplugin1", "myPlugin1PageFunction"); } add_action('admin_menu', 'myplugin1_setup_submenu'); 

Плагин 2:

 function myplugin2_setup_submenu(){ add_submenu_page("mybrand", "My Plugin2", "My Plugin2", 0, "myplugin2", "myPlugin2PageFunction"); } add_action('admin_menu', 'myplugin2_setup_submenu'); 

Должно быть, где-то есть меню, которое является маркой этих двух плагинов:

 function mybrand_setup_menu(){ add_menu_page( 'My Brand', 'My Brand', 'manage_options', 'mybrand', 'myBrandPageFunction' ); } add_action('admin_menu', 'mybrand_setup_menu'); 

Но это не устраивает моих потребностей, потому что мне нужно сделать это:

  • Если из этого бренда установлен один плагин, я бы хотел, чтобы этот плагин был меню (а не подменю) на панели администратора, и в этом случае я не хочу, чтобы бренд появлялся в любом месте.

  • Но если из этого бренда установлено более одного плагина, я бы хотел
    все они станут подменю меню «Мой бренд».

Как я могу это достичь?

Спасибо.

Мне удалось найти решение:

Файл 1:

 //Count the number of active plugins whose Author is "My Brand", and store the number in a global variable. $GLOBALS['mybrand_active_plugins']=0; if (!function_exists('get_plugins')){require_once ABSPATH.'wp-admin/includes/plugin.php';} $plugins=get_plugins(); $activated_plugins=get_option('active_plugins'); foreach ($activated_plugins as $p){ if( (isset($plugins[$p])) AND ($plugins[$p]['Author']=='My Brand')){ $GLOBALS['mybrand_active_plugins']++; } } // Add menus on sidebar if($GLOBALS['mybrand_active_plugins']<2) { function sub1_setup_menu() { add_menu_page('Sub 1','Sub 1','manage_options','sub1','sub1_admin_page'); } add_action('admin_menu','sub1_setup_menu'); } else { function sub1_setup_menu() { if (empty($GLOBALS['admin_page_hooks']['My Brand'] ) ){ add_menu_page('My Brand','My Brand','manage_options','mybrand','mybrand1_admin_page'); } add_submenu_page("mybrand","Sub 1","Sub 1",'manage_options',"sub1","sub1_admin_page"); remove_submenu_page("mybrand","mybrand"); } add_action('admin_menu','sub1_setup_menu'); } // Initialize Brand and Plugin Admin Page function mybrand1_admin_page() { echo "<h1>My Brand Plugins</h1>"; } function sub1_admin_page() { echo "<h1>Sub 1</h1>"; } 

Файл 2:

 //Count the number of active plugins whose Author is "My Brand", and store the number in a global variable. $GLOBALS['mybrand_active_plugins']=0; if (!function_exists('get_plugins')){require_once ABSPATH.'wp-admin/includes/plugin.php';} $plugins=get_plugins(); $activated_plugins=get_option('active_plugins'); foreach ($activated_plugins as $p){ if( (isset($plugins[$p])) AND ($plugins[$p]['Author']=='My Brand')){ $GLOBALS['mybrand_active_plugins']++; } } // Add menus on sidebar if($GLOBALS['mybrand_active_plugins']<2) { function sub2_setup_menu() { add_menu_page('Sub 2','Sub 2','manage_options','sub2','sub2_admin_page'); } add_action('admin_menu','sub2_setup_menu'); } else { function sub2_setup_menu() { if (empty($GLOBALS['admin_page_hooks']['My Brand'])){ add_menu_page('My Brand','My Brand','manage_options','mybrand','mybrand2_admin_page'); } add_submenu_page("mybrand","Sub 2","Sub 2",'manage_options',"sub2","sub2_admin_page"); remove_submenu_page("mybrand","mybrand"); } add_action('admin_menu','sub2_setup_menu'); } // Initialize Brand and Plugin Admin Page function mybrand2_admin_page() { echo "<h1>My Brand Plugins</h1>"; } function sub2_admin_page() { echo "<h1>Sub 2</h1>"; } 

Я не знаю, может ли это быть достигнуто короче, но оно работает.