/** * Append the widget objects to the menu array before the * menu is processed by the walker. * * @since 1.0 * @param array $items - All menu item objects * @param object $args * @return array - Menu objects including widgets */ public function add_widgets_to_menu($items, $args) { // make sure we're working with a Mega Menu if (!is_a($args->walker, 'Mega_Menu_Walker')) { return $items; } $items = apply_filters("megamenu_nav_menu_objects_before", $items, $args); $widget_manager = new Mega_Menu_Widget_Manager(); foreach ($items as $item) { // only look for widgets on top level items if ($item->depth === 0 && $item->megamenu_settings['type'] == 'megamenu') { $panel_widgets = $widget_manager->get_widgets_for_menu_id($item->ID, $args->menu); if (count($panel_widgets)) { $widget_position = 0; $total_widgets_in_menu = count($panel_widgets); $next_order = $this->menu_order_of_next_top_level_item($item->ID, $items); if (!in_array('menu-item-has-children', $item->classes)) { $item->classes[] = 'menu-item-has-children'; } foreach ($panel_widgets as $widget) { $widget_settings = array_merge(Mega_Menu_Nav_Menus::get_menu_item_defaults(), array('mega_menu_columns' => absint($widget['columns']))); $menu_item = array('type' => 'widget', 'in_megamenu' => true, 'title' => $widget['id'], 'content' => $widget_manager->show_widget($widget['id']), 'menu_item_parent' => $item->ID, 'db_id' => 0, 'ID' => $widget['id'], 'menu_order' => $next_order - $total_widgets_in_menu + $widget_position, 'megamenu_order' => $widget['order'], 'megamenu_settings' => $widget_settings, 'depth' => 1, 'classes' => array("menu-item", "menu-item-type-widget", "menu-widget-class-" . $widget_manager->get_widget_class($widget['id']))); $items[] = (object) $menu_item; $widget_position++; } } } } $items = apply_filters("megamenu_nav_menu_objects_after", $items, $args); return $items; }
/** * Append the widget objects to the menu array before the * menu is processed by the walker. * * @since 1.0 * @param array $items - All menu item objects * @param object $args * @return array - Menu objects including widgets */ public function add_widgets_to_menu($items, $args) { // make sure we're working with a Mega Menu if (!is_a($args->walker, 'Mega_Menu_Walker')) { return $items; } $items = apply_filters("megamenu_nav_menu_objects_before", $items, $args); $widget_manager = new Mega_Menu_Widget_Manager(); $default_columns = apply_filters("megamenu_default_columns", 1); foreach ($items as $item) { // only look for widgets on top level items if ($item->depth == 0 && $item->megamenu_settings['type'] == 'megamenu') { $panel_widgets = $widget_manager->get_widgets_for_menu_id($item->ID); if (count($panel_widgets)) { if (!in_array('menu-item-has-children', $item->classes)) { $item->classes[] = 'menu-item-has-children'; } $cols = 0; foreach ($panel_widgets as $widget) { $menu_item = array('type' => 'widget', 'title' => '', 'content' => $widget_manager->show_widget($widget['widget_id']), 'menu_item_parent' => $item->ID, 'db_id' => 0, 'ID' => $widget['widget_id'], 'menu_order' => $item->menu_order + 1, 'classes' => array("menu-item", "menu-item-type-widget", "menu-columns-{$widget['mega_columns']}-of-{$item->megamenu_settings['panel_columns']}", "menu-widget-class-" . $widget_manager->get_widget_class($widget['widget_id']))); if ($cols == 0) { $menu_item['classes'][] = "menu-clear"; } $cols = $cols + $widget['mega_columns']; if ($cols > $item->megamenu_settings['panel_columns']) { $menu_item['classes'][] = "menu-clear"; $cols = $widget['mega_columns']; } $items[] = (object) $menu_item; } } } } $items = apply_filters("megamenu_nav_menu_objects_after", $items, $args); return $items; }
/** * Append the widget objects to the menu array before the * menu is processed by the walker. * * @since 1.0 * @param array $items - All menu item objects * @param object $args * @return array - Menu objects including widgets */ public function add_widgets_to_menu($items, $args) { // make sure we're working with a Mega Menu if (!is_a($args->walker, 'Mega_Menu_Walker')) { return $items; } $widget_manager = new Mega_Menu_Widget_Manager(); $default_columns = apply_filters("megamenu_default_columns", 1); foreach ($items as $item) { // only look for widgets on top level items if ($item->menu_item_parent == 0) { $settings = get_post_meta($item->ID, '_megamenu', true); $align_class = isset($settings['align']) ? 'align-' . $settings['align'] : 'align-bottom-left'; $type_class = isset($settings['type']) ? 'menu-' . $settings['type'] : 'menu-flyout'; $item->classes[] = $align_class; $item->classes[] = $type_class; if ($type_class == 'menu-megamenu') { $panel_widgets = $widget_manager->get_widgets_for_menu_id($item->ID); if (count($panel_widgets)) { if (!in_array('menu-item-has-children', $item->classes)) { $item->classes[] = 'menu-item-has-children'; } $cols = 0; foreach ($panel_widgets as $widget) { $menu_item = array('type' => 'widget', 'title' => '', 'content' => $widget_manager->show_widget($widget['widget_id']), 'menu_item_parent' => $item->ID, 'db_id' => 0, 'ID' => $widget['widget_id'], 'classes' => array("menu-item", "menu-item-type-widget", "menu-columns-{$widget['mega_columns']}")); if ($cols == 0) { $menu_item['classes'][] = "menu-clear"; } $cols = $cols + $widget['mega_columns']; if ($cols > 6) { $menu_item['classes'][] = "menu-clear"; $cols = $widget['mega_columns']; } $items[] = (object) $menu_item; } } } } else { $item->classes[] = "menu-columns-{$default_columns}"; } } return $items; }