0

I wrote a plugin and now i want to extend it through a widget. For test purpose, i copied the sample widget from here https://developer.wordpress.org/themes/functionality/widgets/
but somehow the widget won't show under wp-admin/widgets.php . I include the myplugin/widget/sample-widget.php via require_once.
If I make it as own plugin it works. What am I doing wrong?

Edit:
In my functions.php i include every files i need

require_once A_PLUGIN_DIR . 'includes/ajax.php';
require_once A_PLUGIN_DIR . 'includes/widget.php';

And in the widget.php

/**
* Adds Foo_Widget widget.
*/
class Foo_Widget extends WP_Widget {

/**
 * Register widget with WordPress.
 */
public function __construct() {
    parent::__construct(
        'foo_widget', // Base ID
        'Foo_Widget', // Name
        array( 'description' => __( '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 ) {
    extract( $args );
    $title = apply_filters( 'widget_title', $instance['title'] );

    echo $before_widget;
    if ( ! empty( $title ) ) {
        echo $before_title . $title . $after_title;
    }
    echo __( 'Hello, World!', 'text_domain' );
    echo $after_widget;
}

/**
 * Back-end widget form.
 *
 * @see WP_Widget::form()
 *
 * @param array $instance Previously saved values from database.
 */
public function form( $instance ) {
    if ( isset( $instance[ 'title' ] ) ) {
        $title = $instance[ 'title' ];
    }
    else {
        $title = __( 'New title', 'text_domain' );
    }
    ?>
    <p>
        <label for="<?php echo $this->get_field_name( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
        <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $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'] ) ) ? strip_tags( $new_instance['title'] ) : '';

    return $instance;
}

} add_action( 'widgets_init', function() { register_widget( 'Foo_Widget' ); } );

  • Plese, show us all the relevant and exact code you are using and how explain how you are using it. – cybmeta Nov 17 '16 at 14:37
  • Try adding the require for the widget in the plugin bootstrap file and not in the functions.php. The bootstrap has the plugin header information as a minimum. – LPH Nov 18 '16 at 14:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.