'GET', 'show_in_index' => true, 'callback' => [$this, 'settings_update'], 'permission_callback' => '__return_true', 'args' => [ 'widget_id' => [ 'required' => true, ], 'widget_type' => [ 'required' => true, ], 'page' => [ 'required' => false, 'default' => 1, ], 'type' => [ 'required' => false, 'default' => '', ], 'term' => [ 'required' => false, 'default' => '', ], ], ]); } public function check_for_permission() { return current_user_can('manage_options'); } public function settings_update(\WP_REST_Request $request) { // Identify the widget $widget_id = $request->get_param('widget_id'); $widget_type = $request->get_param('widget_type'); // Get widget settings $settings = get_transient('ui_elements_widgetdata_'.$widget_id); $settings['__current_page'] = $request->get_param('page'); $tax = 'posts-filter_' . $request->get_param('type') . '_ids'; // todo: remove hard coded posts-filter_ and get the value set on widget $settings[$tax] = $request->get_param('term'); // Create the element data $widget = [ 'elType' => 'widget', 'widgetType' => $widget_type, ]; // Generate a new instance of the widget with those settings and return the markup //$widget = new AdvancedPostGrid($widget, $settings); todo: discover why this method don't work $widget = Plugin::instance()->elements_manager->create_element_instance($widget, $settings); $widget->set_settings($settings); $markup = $widget->render_ajax(); return [ 'markup' => $markup, 'total_pages' => $widget->get_query()->max_num_pages, ]; } }