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_ITEM, 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_ITEM, $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 ) ) { Plugin::send_json_success( $form ); } else { Plugin::send_json_error( sprintf( esc_html__( 'Failed to load widget %1$s form in %2$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 ) ) { Plugin::send_json_error( esc_html__( 'Please reload the 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 ) { Plugin::send_json_success( sprintf( esc_html__( 'Saved settings of %s Widget', 'quadmenu' ), $saved[0]->name ) ); } else { Plugin::send_json_error( sprintf( esc_html__( 'Failed to add %1$s to %2$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 = Plugin::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' ); } public static function instance() { if ( ! isset( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } }