Skip to content

Instantly share code, notes, and snippets.

@westonruter
Created March 2, 2015 09:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save westonruter/3b472e1491be0bb6bfb4 to your computer and use it in GitHub Desktop.
Save westonruter/3b472e1491be0bb6bfb4 to your computer and use it in GitHub Desktop.
<?php
/**
* Widget that takes random 0-5 seconds to save.
*
* @link https://github.com/xwp/wordpress-develop/pull/75/files
* @link https://core.trac.wordpress.org/ticket/31501
*/
add_action( 'widgets_init', function () {
class Slow_Update_Widget extends WP_Widget {
/**
* Register widget with WordPress.
*/
function __construct() {
parent::__construct(
'slow_update', // Base ID
__( 'Slow Update Widget', 'text_domain' ), // Name
array( 'description' => __( 'A widget that takes 3 seconds to save.', '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 ) {
$instance = array_merge(
array(
'title' => '',
'body' => '',
),
$instance
);
echo wp_kses_post( $args['before_widget'] );
if ( ! empty( $instance['title'] ) ) {
echo wp_kses_post( $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ). $args['after_title'] );
}
echo wp_kses_post( $instance['body'] );
echo wp_kses_post( $args['after_widget'] );
}
/**
* Back-end widget form.
*
* @see WP_Widget::form()
*
* @param array $instance Previously saved values from database.
* @return mixed
*/
public function form( $instance ) {
$title = ! empty( $instance['title'] ) ? $instance['title'] : '';
$body = ! empty( $instance['body'] ) ? $instance['body'] : '';
?>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:' ); ?></label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
</p>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'body' ) ); ?>"><?php esc_html_e( 'Body:' ); ?></label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'body' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'body' ) ); ?>" type="text" value="<?php echo esc_attr( $body ); ?>">
</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'] = sanitize_text_field( $new_instance['title'] );
$instance['body'] = sanitize_text_field( $new_instance['body'] );
sleep( rand( 0, 5 ) );
return $instance;
}
}
register_widget( 'Slow_Update_Widget' );
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment