/** * Creates a nav menu item and it's sub-menus. Used for initial creation of nav menus. * * @since Client Dash 1.6 */ public function populate_nav_menu() { // Get our POST data from AJAX $menu_item = $_POST['menu_item']; $menu_item_position = $_POST['menu_item_position']; $menu_ID = $_POST['menu_ID']; $role = $_POST['role']; // Get the role object (for capabilities) $role = get_role($role); // Deal with "Plugins" having an extra space $menu_item['menu_title'] = trim($menu_item['menu_title']); // Deal with "Plugins" having html if (strpos($menu_item['menu_title'], 'Plugins') !== false) { $menu_item['menu_title'] = 'Plugins'; } // If icon is using "none" or "div", set accordingly if ($menu_item['icon_url'] == 'none' || $menu_item['icon_url'] == 'div') { unset($menu_item['icon_url']); } // Only add the item if the user is an administrator or if the user has the correct capabilities $no_parent = false; if ($role->has_cap('manage_options') || array_key_exists($menu_item['capability'], $role->capabilities)) { $args = ClientDash_Core_Page_Settings_Tab_Menus::sort_original_admin_menu($menu_item); // Predefined menu position $args['position'] = $menu_item_position; $ID = ClientDash_Core_Page_Settings_Tab_Menus::update_menu_item($menu_ID, 0, $args); } else { $no_parent = true; } // If there are submenus, cycle through them if (isset($menu_item['submenus']) && !empty($menu_item['submenus'])) { foreach ($menu_item['submenus'] as $position => $submenu_item) { if (!isset($ID)) { continue; } // Pass over if current role doesn't have the capabilities, unless the role is an admin if (!$role->has_cap('manage_options') && !array_key_exists($submenu_item['capability'], $role->capabilities)) { continue; } $args = ClientDash_Core_Page_Settings_Tab_Menus::sort_original_admin_menu($submenu_item, $menu_item); // Make it a child IF it has a parent, otherwise make it top-level if (!$no_parent) { $args['parent-id'] = $ID; $args['cd-submenu-parent'] = $submenu_item['parent_slug']; } // Predefined menu position $args['position'] = $position; ClientDash_Core_Page_Settings_Tab_Menus::update_menu_item($menu_ID, 0, $args); } } // We're done! die; }
/** * Allows filtering of the object's properties. * * @since Client Dash 1.6 */ private function filter_data() { /** * Add to this array in order to associate more custom data with each nav menu item. Default * menu item properties can be set here as well. * * @since Client Dash 1.6 */ self::$menu_item_defaults = apply_filters('cd_nav_menu_item_defaults', self::$menu_item_defaults); /** * Add or remove items from the CD default WP Core menu item list. * * @since Client Dash 1.6 */ self::$wp_core = apply_filters('cd_nav_menu_wp_core_items', self::$wp_core); /** * Allows extensions to add to the available side sortables. * * @since Client Dash 1.6.5 */ $this->side_sortables = apply_filters('cd_menus_side_sortables', $this->side_sortables); }