Extending Widgets – Exclude # of posts field from Recent Posts Widget

You need to add a ‘form’ method. That is the method that creates the widget form on the backend. In the current default widget, that method looks like this:

function form( $instance ) {
  $title     = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : '';
  $number    = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5;
  $show_date = isset( $instance['show_date'] ) ? (bool) $instance['show_date'] : false;
  ?>
  <p><label for="<?php echo $this->get_field_id( '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 $title; ?>" /></p>
  <p><label for="<?php echo $this->get_field_id( 'number' ); ?>"><?php _e( 'Number of posts to show:' ); ?></label>
  <input id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" type="text" value="<?php echo $number; ?>" size="3" /></p>
  <p><input class="checkbox" type="checkbox" <?php checked( $show_date ); ?> id="<?php echo $this->get_field_id( 'show_date' ); ?>" name="<?php echo $this->get_field_name( 'show_date' ); ?>" />
  <label for="<?php echo $this->get_field_id( 'show_date' ); ?>"><?php _e( 'Display post date?' ); ?></label></p>
  <?php
}

Copy that into your class and remove the line starting with $number and the form field that uses it– the second <p>.

Also, in your widget method, you can skip the conditional– if( empty( $instance['number'] ) || ! $number = absint( $instance['number'] ) )— and just set $number. You don’t need to check to see if `$instance[‘number’] is set. It won’t be.