Why won’t my custom widget stay in the sidebar after a reload?

After I drag my custom widget into a widget area and reload the page it’s gone. Any ideas?

<?php
    add_action('widgets_init','register_postTypeWidget');

    function register_postTypeWidget(){
        register_widget('postType_widget');
    }

    class postType_widget extends WP_Widget {
        function postType_widget() {  
            $widget_ops = array( 'classname' => 'postType_widget', 'description' => __('Display Posts by Post Type') );  
            $control_ops = array( 'width' => 300, 'height' => 350, 'id_base' => 'postType_widget' );  
            $this->WP_Widget( 'postType_widget', __('Posts by Post Type', 'postType_widget'), $widget_ops, $control_ops );  
        }
         function widget($args, $instance) {
            extract($args); 
            echo "hello world";

        }
        function update( $new_instance, $old_instance ) {  

            $instance = $old_instance;

            $instance['title'] = strip_tags( $new_instance['title'] );
            $instance['postTypeSelect'] = strip_tags( $new_instance['postTypeSelect'] );
            $instance['postTypeNumber'] = strip_tags( $new_instance['postTypeNumber'] );
            $instance['selectedPostTag'] = strip_tags( $new_instance['selectedPostTag'] );
            $instance['showDate'] = strip_tags( $new_instance['showDate'] );
            $instance['showAuthor'] = strip_tags( $new_instance['showAuthor'] );

            return $instance;

        }
        function form( $instance ) {    
        $defaults = array( 'title' => __(''), 'postTypeSelect' => __(''), 'postType_number' =>  __(''), 'selected_postTag' =>  __(''), 'show_date' =>  __(''), 'show_author' =>  __('') );
        $instance = wp_parse_args( (array) $instance, $defaults);   

        $args="";
        $output="object";
        $post_types = get_post_types( $args, $output );
        $posttags = get_tags();
    ?>
            <p>
                <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Title'); ?></label>
                <input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" style="width:100%;" />
            </p>
            <p>
                <label for="<?php echo $this->get_field_id( 'postTypeSelect' ); ?>"><?php _e('Select Post Type'); ?></label>
                <?php 
                    echo '<select name="postTypeSelect" style="width:100%;">';
                    echo '<option value="">Select Post Type</option>';
                    foreach($post_types as $post_type) {
                        if($instance['postTypeSelect'] == $post_type->name)
                            echo '<option value="'.$post_type->name.'" selected >'.$post_type->label.'</option>';
                        else 
                            echo '<option value="'.$post_type->name.'" >'.$post_type->label.'</option>';
                    }
                    echo '</select>';
                ?>
            </p>
            <p>
                <label for="<?php echo $this->get_field_id( 'postTypeNumber' ); ?>"><?php _e('Number of Posts'); ?></label>
                <?php 
                    echo '<select name="postTypeNumber" style="width:100%;">';
                    echo '<option value="">Number of Posts</option>';
                    for($x=1; $x < 11; $x++) {
                        if($instance['postTypeNumber'] == $x)
                            echo '<option value="'.$x.'" selected >'.$x.'</option>';
                        else
                            echo '<option value="'.$x.'" >'.$x.'</option>';
                    }
                    echo '</select>';
                ?>
            </p>
            <p>
                <label for="<?php echo $this->get_field_id( 'selectedPostTag' ); ?>" style="display:block;width:100%;"><?php _e('Show Only Posts with These Tags (optional)'); ?></label>
                <?php
                    foreach($posttags as $postTag){
                        if($instance['selected_postTag'] == $postTag->term_id)
                            echo '<input type="checkbox" name="selectedPostTag[]" value="'.$postTag->term_id.'" checked />'.$postTag->name.'</br>';
                        else
                            echo '<input type="checkbox" name="selectedPostTag[]" value="'.$postTag->term_id.'" />'.$postTag->name.'</br>';
                    }
                ?>
            </p>
            <p>
                <label for="<?php echo $this->get_field_id( 'additional_options' ); ?>" style="display:block;width:100%;"><?php _e('Additional Options'); ?></label>
                <?php if($instance['show_date'] == 'show_date'): ?>
                    <input type="checkbox" id="<?php echo $this->get_field_id( 'showDate' ); ?>" name="<?php echo $this->get_field_name( 'showDate' ); ?>" value="showDate" checked />Show Date</br>
                <?php else: ?>
                    <input type="checkbox" id="<?php echo $this->get_field_id( 'showDate' ); ?>" name="<?php echo $this->get_field_name( 'showDate' ); ?>" value="showDate" />Show Date</br>
                <?php endif; ?>

                <?php if($instance['show_author'] == 'show_author'): ?>
                    <input type="checkbox" id="<?php echo $this->get_field_id( 'showAuthor' ); ?>" name="<?php echo $this->get_field_name( 'showAuthor' ); ?>" value="showAuthor" checked />Show Author</br>
                <?php else: ?>
                    <input type="checkbox" id="<?php echo $this->get_field_id( 'showAuthor' ); ?>" name="<?php echo $this->get_field_name( 'showAuthor' ); ?>" value="showAuthor" />Show Author</br>
                <?php endif; ?>
            </p>
    <?php
        }
    }
?>

1 Answer
1

You forgot the constructor

Example:

function __construct() {
    parent::__construct(
        'foo_widget', // Base ID
        __( 'Widget Title', 'text_domain' ), // Name
        array( 'description' => __( 'A Foo Widget', 'text_domain' ), ) // Args
    );
}

http://codex.wordpress.org/Widgets_API

Leave a Comment