get_available_widgets(); ?>

widgets)) { foreach ($wp_widget_factory->widgets as $widget) { if (isset($widget->id_base) && $widget->id_base != 'quadmenu_widget') { $disabled_widgets = apply_filters('quadmenu_incompatible_widgets', array()); if (!in_array(sanitize_key($widget->id_base), $disabled_widgets)) { $widgets[$widget->id_base] = array( 'depth' => 2, 'label' => $widget->name, 'url' => '#widget', ); if (isset($widget->widget_options['description'])) { $widgets[$widget->id_base]['desc'] = $widget->widget_options['description']; } } } } } return $widgets; } public function update_nav_menu_item_widget($menu_id, $menu_item_db_id, $args) { if (!empty($args['menu-item-quadmenu-widget'])) { require_once( ABSPATH . 'wp-admin/includes/widgets.php' ); $saved_settings = array_filter((array) get_post_meta($menu_item_db_id, QUADMENU_DB_KEY, true)); $id_base = sanitize_text_field($args['menu-item-quadmenu-widget']); $next_id = next_widget_id_number($id_base); $this->add_widget_instance($id_base, $next_id, $menu_item_db_id); $widget_id = $this->add_widget_to_sidebar($id_base, $next_id); $saved_settings['widget'] = $id_base; $saved_settings['widget_number'] = $next_id; $saved_settings['widget_id'] = $widget_id; update_post_meta($menu_item_db_id, QUADMENU_DB_KEY, $saved_settings); } } function add_nav_menu_item_widgets($walker_class_name, $menu_id = null, $menu_obj = null, $menu_items = null) { if (!empty($menu_obj->menu_item_parent) && !empty($menu_obj->quadmenu) && $menu_obj->quadmenu === 'widget') { return __CLASS__; } return $walker_class_name; } public function walk($elements, $max_depth, $args) { $output = ''; foreach ($elements as $e) { $output .= $this->widgets($e, (object) $args); } return $output; wp_die(); } public function widgets($widget_obj, $args) { global $wp_registered_widgets; if (!isset($args->doing_ajax) && $widget_obj->_invalid) { ob_start(); ?>
  • title); ?>
  • title); ?>
  • form_widget($widget_id)) { QuadMenu::send_json_success($form); } else { QuadMenu::send_json_error(sprintf(esc_html__('Failed to load widget %s form in %d', 'quadmenu'), $widget_id, $menu_item_id)); } wp_die(); } public function form_widget($widget_id) { global $wp_registered_widget_controls; $control = $wp_registered_widget_controls[$widget_id]; $id_base = $this->get_id_base_for_widget_id($widget_id); ob_start(); ?>
    $menu_item_id ); update_option('widget_' . $id_base, $current_widgets); } private function add_widget_to_sidebar($id_base, $next_id) { $widget_id = $id_base . '-' . $next_id; $sidebar_widgets = $this->get_sidebar_widgets(); $sidebar_widgets[] = $widget_id; $this->set_sidebar_widgets($sidebar_widgets); return $widget_id; } public function get_sidebar_widgets() { $sidebar_widgets = wp_get_sidebars_widgets(); if (!isset($sidebar_widgets['quadmenu-widgets'])) { return false; } return $sidebar_widgets['quadmenu-widgets']; } private function set_sidebar_widgets($widgets) { $sidebar_widgets = wp_get_sidebars_widgets(); // Remove because is not defined in first init //if (!isset($sidebar_widgets['quadmenu-widgets'])) { // return false; //} $sidebar_widgets['quadmenu-widgets'] = $widgets; wp_set_sidebars_widgets($sidebar_widgets); } public function ajax_save_widget() { if (!check_ajax_referer('quadmenu', 'nonce', false)) { QuadMenu::send_json_error(esc_html__('Please reload page.', 'quadmenu')); } $menu_item_id = absint($_REQUEST['menu_item_id']); $id_base = sanitize_text_field($_REQUEST['id_base']); $saved = $this->save_widget($id_base); if ($saved) { QuadMenu::send_json_success(sprintf(esc_html__('Saved settings of %s Widget', 'quadmenu'), $saved[0]->name)); } else { QuadMenu::send_json_error(sprintf(esc_html__('Failed to add %s to %d', 'quadmenu'), $id_base, $menu_item_id)); } wp_die(); } public function save_widget($id_base) { global $wp_registered_widget_updates; $control = $wp_registered_widget_updates[$id_base]; if (isset($control['callback']) && isset($control['params']) && is_callable($control['callback'])) { call_user_func_array($control['callback'], $control['params']); return $control['callback']; } return false; } public function delete_nav_menu_widget($ID, $menu_id) { $menu_obj = QuadMenu::wp_setup_nav_menu_item($ID); if (empty($menu_obj->widget_id)) return; $this->delete_widget($menu_obj->widget_id); } function delete_widget($widget_id) { $this->remove_widget_from_sidebar($widget_id); $this->remove_widget_instance($widget_id); return true; } private function remove_widget_from_sidebar($widget_id) { $widgets = $this->get_sidebar_widgets(); $new_quadmenu_widgets = array(); if (count($widgets)) { foreach ($widgets as $widget) { if ($widget != $widget_id) $new_quadmenu_widgets[] = $widget; } } $this->set_sidebar_widgets($new_quadmenu_widgets); return $widget_id; } public function get_id_base_for_widget_id($widget_id) { global $wp_registered_widget_controls; if (!isset($wp_registered_widget_controls[$widget_id])) { return false; } $control = $wp_registered_widget_controls[$widget_id]; $id_base = isset($control['id_base']) ? $control['id_base'] : $control['id']; return $id_base; } private function remove_widget_instance($widget_id) { $id_base = $this->get_id_base_for_widget_id($widget_id); $widget_number = $this->get_widget_number_for_widget_id($widget_id); $current_widgets = get_option('widget_' . $id_base); if (isset($current_widgets[$widget_number])) { unset($current_widgets[$widget_number]); update_option('widget_' . $id_base, $current_widgets); return true; } return false; } public function get_widget_number_for_widget_id($widget_id) { $parts = explode("-", $widget_id); return absint(end($parts)); } public function admin_print_footer_scripts($hook) { do_action('admin_footer-widgets.php'); } public function admin_print_scripts($hook) { do_action('admin_print_scripts-widgets.php'); } public function admin_print_styles($hook) { do_action('admin_print_styles-widgets.php'); } } new QuadMenu_Nav_Menu_Widgets();