2015-09-01 09:49:21 -04:00
< ? php
/**
2015-09-22 11:04:26 -04:00
* Widget API : WP_Widget_Text class
2015-09-01 09:49:21 -04:00
*
* @ package WordPress
* @ subpackage Widgets
2015-09-22 11:04:26 -04:00
* @ since 4.4 . 0
*/
/**
* Core class used to implement a Text widget .
*
* @ since 2.8 . 0
*
* @ see WP_Widget
2015-09-01 09:49:21 -04:00
*/
class WP_Widget_Text extends WP_Widget {
2015-09-26 20:27:26 -04:00
/**
* Sets up a new Text widget instance .
*
* @ since 2.8 . 0
* @ access public
*/
2015-09-01 09:49:21 -04:00
public function __construct () {
2016-03-21 17:59:29 -04:00
$widget_ops = array (
'classname' => 'widget_text' ,
'description' => __ ( 'Arbitrary text or HTML.' ),
'customize_selective_refresh' => true ,
);
2017-05-11 14:55:43 -04:00
$control_ops = array (
'width' => 400 ,
'height' => 350 ,
);
2016-03-21 17:59:29 -04:00
parent :: __construct ( 'text' , __ ( 'Text' ), $widget_ops , $control_ops );
2015-09-01 09:49:21 -04:00
}
2017-05-11 14:55:43 -04:00
/**
* Add hooks for enqueueing assets when registering all widget instances of this widget class .
*
* @ since 4.8 . 0
* @ access public
*/
public function _register () {
// Note that the widgets component in the customizer will also do the 'admin_print_scripts-widgets.php' action in WP_Customize_Widgets::print_scripts().
add_action ( 'admin_print_scripts-widgets.php' , array ( $this , 'enqueue_admin_scripts' ) );
// Note that the widgets component in the customizer will also do the 'admin_footer-widgets.php' action in WP_Customize_Widgets::print_footer_scripts().
add_action ( 'admin_footer-widgets.php' , array ( $this , 'render_control_template_scripts' ) );
parent :: _register ();
}
2015-09-01 09:49:21 -04:00
/**
2015-09-26 20:27:26 -04:00
* Outputs the content for the current Text widget instance .
2015-09-25 15:24:24 -04:00
*
* @ since 2.8 . 0
* @ access public
*
* @ param array $args Display arguments including 'before_title' , 'after_title' ,
* 'before_widget' , and 'after_widget' .
2015-09-26 20:27:26 -04:00
* @ param array $instance Settings for the current Text widget instance .
2015-09-01 09:49:21 -04:00
*/
public function widget ( $args , $instance ) {
2015-09-25 15:24:24 -04:00
2015-09-08 18:17:26 -04:00
/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
2015-09-01 09:49:21 -04:00
$title = apply_filters ( 'widget_title' , empty ( $instance [ 'title' ] ) ? '' : $instance [ 'title' ], $instance , $this -> id_base );
2017-05-15 18:36:41 -04:00
$text = ! empty ( $instance [ 'text' ] ) ? $instance [ 'text' ] : '' ;
2015-09-25 15:21:24 -04:00
2015-09-01 09:49:21 -04:00
/**
2016-05-22 14:06:28 -04:00
* Filters the content of the Text widget .
2015-09-01 09:49:21 -04:00
*
* @ since 2.3 . 0
2015-09-25 15:21:24 -04:00
* @ since 4.4 . 0 Added the `$this` parameter .
2015-09-01 09:49:21 -04:00
*
2017-05-15 18:36:41 -04:00
* @ param string $text The widget content .
* @ param array $instance Array of settings for the current widget .
* @ param WP_Widget_Text $this Current Text widget instance .
2015-09-01 09:49:21 -04:00
*/
2017-05-15 18:36:41 -04:00
$text = apply_filters ( 'widget_text' , $text , $instance , $this );
2015-09-25 15:21:24 -04:00
2017-05-11 14:55:43 -04:00
if ( isset ( $instance [ 'filter' ] ) ) {
if ( 'content' === $instance [ 'filter' ] ) {
/**
* Filters the content of the Text widget to apply changes expected from the visual ( TinyMCE ) editor .
*
* By default a subset of the_content filters are applied , including wpautop and wptexturize .
*
* @ since 4.8 . 0
*
2017-05-15 18:36:41 -04:00
* @ param string $text The widget content .
* @ param array $instance Array of settings for the current widget .
* @ param WP_Widget_Text $this Current Text widget instance .
2017-05-11 14:55:43 -04:00
*/
2017-05-15 18:36:41 -04:00
$text = apply_filters ( 'widget_text_content' , $text , $instance , $this );
2017-05-11 14:55:43 -04:00
} elseif ( $instance [ 'filter' ] ) {
$text = wpautop ( $text ); // Back-compat for instances prior to 4.8.
}
}
2015-09-01 09:49:21 -04:00
echo $args [ 'before_widget' ];
if ( ! empty ( $title ) ) {
echo $args [ 'before_title' ] . $title . $args [ 'after_title' ];
2017-05-11 14:55:43 -04:00
}
?>
< div class = " textwidget " >< ? php echo $text ; ?> </div>
2015-09-01 09:49:21 -04:00
< ? php
echo $args [ 'after_widget' ];
}
/**
2015-09-26 20:27:26 -04:00
* Handles updating settings for the current Text widget instance .
*
* @ since 2.8 . 0
* @ access public
*
* @ param array $new_instance New settings for this instance as input by the user via
* WP_Widget :: form () .
* @ param array $old_instance Old settings for this instance .
* @ return array Settings to save or bool false to cancel saving .
2015-09-01 09:49:21 -04:00
*/
public function update ( $new_instance , $old_instance ) {
$instance = $old_instance ;
$instance [ 'title' ] = sanitize_text_field ( $new_instance [ 'title' ] );
2016-02-22 20:02:26 -05:00
if ( current_user_can ( 'unfiltered_html' ) ) {
$instance [ 'text' ] = $new_instance [ 'text' ];
} else {
$instance [ 'text' ] = wp_kses_post ( $new_instance [ 'text' ] );
}
2017-05-11 14:55:43 -04:00
/*
* Re - use legacy 'filter' ( wpautop ) property to now indicate content filters will always apply .
* Prior to 4.8 , this is a boolean value used to indicate whether or not wpautop should be
* applied . By re - using this property , downgrading WordPress from 4.8 to 4.7 will ensure
* that the content for Text widgets created with TinyMCE will continue to get wpautop .
*/
$instance [ 'filter' ] = 'content' ;
2015-09-01 09:49:21 -04:00
return $instance ;
}
2017-05-11 14:55:43 -04:00
/**
* Loads the required scripts and styles for the widget control .
*
* @ since 4.8 . 0
* @ access public
*/
public function enqueue_admin_scripts () {
wp_enqueue_editor ();
wp_enqueue_script ( 'text-widgets' );
}
2015-09-01 09:49:21 -04:00
/**
2015-09-26 20:27:26 -04:00
* Outputs the Text widget settings form .
*
* @ since 2.8 . 0
2017-05-11 14:55:43 -04:00
* @ since 4.8 . 0 Form only contains hidden inputs which are synced with JS template .
2015-09-26 20:27:26 -04:00
* @ access public
2017-05-11 14:55:43 -04:00
* @ see WP_Widget_Visual_Text :: render_control_template_scripts ()
2015-09-26 20:27:26 -04:00
*
* @ param array $instance Current settings .
2017-05-11 14:55:43 -04:00
* @ return void
2015-09-01 09:49:21 -04:00
*/
public function form ( $instance ) {
2017-05-11 14:55:43 -04:00
$instance = wp_parse_args (
( array ) $instance ,
array (
'title' => '' ,
'text' => '' ,
)
);
2015-09-01 09:49:21 -04:00
?>
2017-05-11 14:55:43 -04:00
< input id = " <?php echo $this->get_field_id ( 'title' ); ?> " name = " <?php echo $this->get_field_name ( 'title' ); ?> " class = " title " type = " hidden " value = " <?php echo esc_attr( $instance['title'] ); ?> " >
< input id = " <?php echo $this->get_field_id ( 'text' ); ?> " name = " <?php echo $this->get_field_name ( 'text' ); ?> " class = " text " type = " hidden " value = " <?php echo esc_attr( $instance['text'] ); ?> " >
< ? php
}
2015-09-01 09:49:21 -04:00
2017-05-11 14:55:43 -04:00
/**
* Render form template scripts .
*
* @ since 4.8 . 0
* @ access public
*/
public function render_control_template_scripts () {
?>
< script type = " text/html " id = " tmpl-widget-text-control-fields " >
< # var elementIdPrefix = 'el' + String( Math.random() ).replace( /\D/g, '' ) + '_' #>
< p >
< label for = " { { elementIdPrefix }}title " >< ? php esc_html_e ( 'Title:' ); ?> </label>
< input id = " { { elementIdPrefix }}title " type = " text " class = " widefat title " >
</ p >
< p >
< label for = " { { elementIdPrefix }}text " class = " screen-reader-text " >< ? php esc_html_e ( 'Content:' ); ?> </label>
< textarea id = " { { elementIdPrefix }}text " class = " widefat text " style = " height: 200px " rows = " 16 " cols = " 20 " ></ textarea >
</ p >
</ script >
2015-09-26 20:27:26 -04:00
< ? php
2015-09-01 09:49:21 -04:00
}
}