Adding a widget programmatically

I want to add widgets to my wordpress site programmatically. I tried the following code from the codex docs:

class MyNewWidget extends WP_Widget {

    function MyNewWidget() {
        // Instantiate the parent object
        parent::__construct( false, 'My New Widget Title' );
    }

    function widget( $args, $instance ) {
        // Widget output
    }

    function update( $new_instance, $old_instance ) {
        // Save widget options
    }

    function form( $instance ) {
        // Output admin widget options form
    }
}

function myplugin_register_widgets() {
    register_widget( 'MyNewWidget' );
}

add_action( 'widgets_init', 'myplugin_register_widgets' );

But doesn’t seem to work. I even tried the code from the question Programmatically add widgets to sidebars but to no avail. Please tell me if I am missing out something.

Read More

Thankyou

Related posts

Leave a Reply

2 comments

  1. Because your code is just like prototype, it doesn’t display anything.
    That’s why your are not seeing anything in dashboard.

    /**
     * Adds Foo_Widget widget.
     */
    class Foo_Widget extends WP_Widget {
    
        /**
         * Register widget with WordPress.
         */
        function __construct() {
            parent::__construct(
                'foo_widget', // Base ID
                esc_html__( 'Widget Title', 'text_domain' ), // Name
                array( 'description' => esc_html__( 'A Foo Widget', 'text_domain' ), ) // Args
            );
        }
    
        /**
         * Front-end display of widget.
         *
         * @see WP_Widget::widget()
         *
         * @param array $args     Widget arguments.
         * @param array $instance Saved values from database.
         */
        public function widget( $args, $instance ) {
            echo $args['before_widget'];
            if ( ! empty( $instance['title'] ) ) {
                echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
            }
            echo esc_html__( 'Hello, World!', 'text_domain' );
            echo $args['after_widget'];
        }
    
        /**
         * Back-end widget form.
         *
         * @see WP_Widget::form()
         *
         * @param array $instance Previously saved values from database.
         */
        public function form( $instance ) {
            $title = ! empty( $instance['title'] ) ? $instance['title'] : esc_html__( 'New title', 'text_domain' );
            ?>
            <p>
            <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_attr_e( 'Title:', 'text_domain' ); ?></label> 
            <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
            </p>
            <?php 
        }
    
        /**
         * Sanitize widget form values as they are saved.
         *
         * @see WP_Widget::update()
         *
         * @param array $new_instance Values just sent to be saved.
         * @param array $old_instance Previously saved values from database.
         *
         * @return array Updated safe values to be saved.
         */
        public function update( $new_instance, $old_instance ) {
            $instance = array();
            $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? sanitize_text_field( $new_instance['title'] ) : '';
    
            return $instance;
        }
    
    } // class Foo_Widget
    
    // register Foo_Widget widget
    function register_foo_widget() {
        register_widget( 'Foo_Widget' );
    }
    add_action( 'widgets_init', 'register_foo_widget' );
    

    I just copied this code from wordpress.org but you can modify it to your need
    .Reply if you need more help

  2. here is an example that should work with the latest version of wordpress:

     class MyNewWidget extends WP_Widget {
            function MyNewWidget() {
                parent::WP_Widget(false, 'My New Widget');
            }
            function form($instance) {
                // outputs the options form on admin
            }
            function update($new_instance, $old_instance) {
                // processes widget options to be saved
                return $new_instance;
            }
            function widget($args, $instance) {
                echo('<span>this is my widget</span>');
            }
        }
        register_widget('MyNewWidget');