get_widget_instance()->id_base; } /** * Get widget title. * * Retrieve WordPress widget title. * * @since 1.0.0 * @access public * * @return string Widget title. */ public function get_title() { return $this->get_widget_instance()->name; } /** * Get widget categories. * * Retrieve the list of categories the WordPress widget belongs to. * * Used to determine where to display the widget in the editor. * * @since 1.0.0 * @access public * * @return array Widget categories. Returns either a WordPress category. */ public function get_categories() { return [ 'wordpress' ]; } /** * Get widget icon. * * Retrieve WordPress widget icon. * * @since 1.0.0 * @access public * * @return string Widget icon. Returns either a WordPress icon. */ public function get_icon() { return 'eicon-wordpress'; } /** * Get widget keywords. * * Retrieve the list of keywords the widget belongs to. * * @since 2.1.0 * @access public * * @return array Widget keywords. */ public function get_keywords() { return [ 'wordpress', 'widget' ]; } public function get_help_url() { return ''; } /** * Whether the reload preview is required or not. * * Used to determine whether the reload preview is required. * * @since 1.0.0 * @access public * * @return bool Whether the reload preview is required. */ public function is_reload_preview_required() { return true; } /** * Retrieve WordPress widget form. * * Returns the WordPress widget form, to be used in Elementor. * * @since 1.0.0 * @access public * * @return string Widget form. */ public function get_form() { $instance = $this->get_widget_instance(); ob_start(); echo '
'; return ob_get_clean(); } /** * Retrieve WordPress widget instance. * * Returns an instance of WordPress widget, to be used in Elementor. * * @since 1.0.0 * @access public * * @return \WP_Widget */ public function get_widget_instance() { if ( is_null( $this->_widget_instance ) ) { global $wp_widget_factory; if ( isset( $wp_widget_factory->widgets[ $this->_widget_name ] ) ) { $this->_widget_instance = $wp_widget_factory->widgets[ $this->_widget_name ]; $this->_widget_instance->_set( 'REPLACE_TO_ID' ); } elseif ( class_exists( $this->_widget_name ) ) { $this->_widget_instance = new $this->_widget_name(); $this->_widget_instance->_set( 'REPLACE_TO_ID' ); } } return $this->_widget_instance; } /** * Retrieve WordPress widget parsed settings. * * Returns the WordPress widget settings, to be used in Elementor. * * @access protected * @since 2.3.0 * * @return array Parsed settings. */ protected function get_init_settings() { $settings = parent::get_init_settings(); if ( ! empty( $settings['wp'] ) ) { $widget = $this->get_widget_instance(); $instance = $widget->update( $settings['wp'], [] ); /** This filter is documented in wp-includes/class-wp-widget.php */ $settings['wp'] = apply_filters( 'widget_update_callback', $instance, $settings['wp'], [], $widget ); } return $settings; } /** * Register WordPress widget controls. * * Adds different input fields to allow the user to change and customize the widget settings. * * @since 3.1.0 * @access protected */ protected function register_controls() { $this->add_control( 'wp', [ 'label' => esc_html__( 'Form', 'elementor' ), 'type' => Controls_Manager::WP_WIDGET, 'widget' => $this->get_name(), 'id_base' => $this->get_widget_instance()->id_base, ] ); } /** * Render WordPress widget output on the frontend. * * Written in PHP and used to generate the final HTML. * * @since 1.0.0 * @access protected */ protected function render() { $default_widget_args = [ 'widget_id' => $this->get_name(), 'before_widget' => '', 'after_widget' => '', 'before_title' => '