AdminMenus submenu handling causing PHP warnings
-
Hi,
We have identified an issue in the
white-label-cmsplugin related to how admin submenu items are processed, which can lead to PHP warnings and potentially break the admin menu when stored values are malformed or legacy.In
includes/classes/AdminMenus.php, inside the block that handles$setting_admin_menus['sub'], the current code assumes thatexplode()will always return at least two valid elements:if (isset($setting_admin_menus['sub']) && is_array($setting_admin_menus['sub'])) {
foreach ($setting_admin_menus['sub'] as $submenu_item) {
$submenu_list = explode($this->get_submenu_placeholder(), $submenu_item);
$main_menu = $submenu_list[0];
$main_submenu = $submenu_list[1];
$this->remove_submenu_page($main_menu, $main_submenu);
}
$this->fix_woocommerce();
$this->fix_yoast($setting_admin_menus['sub']);
}If any stored value in
admin_menus['sub']does not contain the expected placeholder,$submenu_list[1]is undefined and this results in an “Undefined array key” warning and inconsistent submenu handling in the admin area.We suggest adding defensive checks around the
explode()result, for example:if (isset($setting_admin_menus['sub']) && is_array($setting_admin_menus['sub'])) {
foreach ($setting_admin_menus['sub'] as $submenu_item) {
/*
$submenu_list = explode($this->get_submenu_placeholder(), $submenu_item);
$main_menu = $submenu_list[0];
$main_submenu = $submenu_list[1];
$this->remove_submenu_page($main_menu, $main_submenu);
*/
$submenu_list = explode($this->get_submenu_placeholder(), (string) $submenu_item, 2);
if (count($submenu_list) < 2 || empty($submenu_list[0]) || empty($submenu_list[1])) {
continue;
}
$main_menu = $submenu_list[0];
$main_submenu = $submenu_list[1];
$this->remove_submenu_page($main_menu, $main_submenu);
}
$this->fix_woocommerce();
$this->fix_yoast($setting_admin_menus['sub']);
}This change ensures that only well-formed submenu definitions are processed, and prevents the undefined array key warnings when invalid or legacy data is present in the stored settings.
Please let us know if you need additional details (WordPress version, PHP version, or full warning message) to reproduce and confirm the issue.
You must be logged in to reply to this topic.