/** * Get mega menu tab content * * @since 1.0.0 * * @param int $id menu item ID * @param string $title menu item title * @param int $depth menu item depth * @param array $meta menu item meta * @return string tab HTML */ public function mega_menu($id, $title, $depth, $meta) { if ($depth > 0) { return '<em>' . __("Mega Menus can only be created on top level menu items.", "megamenu") . '</em>'; } global $cherry_mega_menu_total_columns; $widget_manager = new cherry_mega_menu_widget_manager(); $all_widgets = $widget_manager->get_available_widgets(); $meta['type'] = isset($meta['type']) ? $meta['type'] : ''; $return = '<label class="menu_enable"><input class="toggle_menu" type="checkbox" name="type" value="megamenu" ' . checked($meta['type'], 'megamenu', false) . '/>' . __("Enable Mega Menu for current item", "cherry-mega-menu") . '</label>'; $return .= '<select id="widget_selector">'; $return .= '<option value="disabled">' . __("Select a Widget to add to the panel", "cherry-mega-menu") . '</option>'; foreach ($all_widgets as $widget) { $return .= '<option value="' . $widget['value'] . '">' . $widget['text'] . '</option>'; } $return .= '</select>'; $return .= '<div id="widgets">'; $panel_widgets = $widget_manager->get_widgets_for_menu_id($id); if (!count($panel_widgets)) { $return .= '<div class="message no_widgets">' . __("No widgets found", "cherry-mega-menu") . '<br /><br /><i>' . __("Use the Widget Selector (top right) to add a Widget to this panel.", "cherry-mega-menu") . '</i></div>'; } else { foreach ($panel_widgets as $widget) { $return .= $widget_manager->get_widget_html($widget['title'], $widget['widget_id'], $widget['mega_columns'], $cherry_mega_menu_total_columns); } } $return .= '</div>'; return $return; }
/** * Append the widget objects to the menu array before the * menu is processed by the walker. * * @since 1.0.0 * * @param array $items all menu item objects * @param object $args * @return array menu objects including widgets */ public function add_menu_objects($items, $args) { // make sure we're working with a Mega Menu if (!is_a($args->walker, 'cherry_mega_menu_walker')) { return $items; } $widget_manager = new cherry_mega_menu_widget_manager(); foreach ($items as $item) { $saved_settings = array_filter((array) get_post_meta($item->ID, '_cherry_mega_menu', true)); $item->megamenu_settings = wp_parse_args($saved_settings, array('type' => '')); // only look for widgets on top level items if ($item->menu_item_parent != 0 || $item->megamenu_settings['type'] != 'megamenu') { continue; } $panel_widgets = $widget_manager->get_widgets_for_menu_id($item->ID); if (empty($panel_widgets)) { continue; } if (!in_array('menu-item-has-children', $item->classes)) { $item->classes[] = 'menu-item-has-children'; } $cols = 0; $item_appended = $this->append_widgets($panel_widgets, $item, $widget_manager); $items = array_merge($items, $item_appended); } return $items; }