WordPress.org

Make WordPress Core


Ignore:
Timestamp:
09/19/2017 07:43:34 AM (2 years ago)
Author:
ocean90
Message:

Widgets: Prevent visual Text widget from decoding encoded HTML.

Also apply the_editor_content filters on widget text with format_for_editor() as is done for the post editor.

Merge of [41260] to the 4.8 branch.

Amends [40631].
Props westonruter, azaozz.
See #35243.
Fixes #41596.

Location:
branches/4.8
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.8

  • branches/4.8/src/wp-includes/widgets/class-wp-widget-text.php

    r41391 r41392  
    336336     * @access public
    337337     * @see WP_Widget_Visual_Text::render_control_template_scripts()
     338     * @see _WP_Editors::editor()
    338339     *
    339340     * @param array $instance Current settings.
     
    350351        ?>
    351352        <?php if ( ! $this->is_legacy_instance( $instance ) ) : ?>
    352             <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'] ); ?>">
    353             <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'] ); ?>">
    354             <input id="<?php echo $this->get_field_id( 'filter' ); ?>" name="<?php echo $this->get_field_name( 'filter' ); ?>" class="filter" type="hidden" value="on">
    355             <input id="<?php echo $this->get_field_id( 'visual' ); ?>" name="<?php echo $this->get_field_name( 'visual' ); ?>" class="visual" type="hidden" value="on">
     353            <?php
     354
     355            if ( user_can_richedit() ) {
     356                add_filter( 'the_editor_content', 'format_for_editor', 10, 2 );
     357                $default_editor = 'tinymce';
     358            } else {
     359                $default_editor = 'html';
     360            }
     361
     362            /** This filter is documented in wp-includes/class-wp-editor.php */
     363            $text = apply_filters( 'the_editor_content', $instance['text'], $default_editor );
     364
     365            // Reset filter addition.
     366            if ( user_can_richedit() ) {
     367                remove_filter( 'the_editor_content', 'format_for_editor' );
     368            }
     369
     370            // Prevent premature closing of textarea in case format_for_editor() didn't apply or the_editor_content filter did a wrong thing.
     371            $escaped_text = preg_replace( '#</textarea#i', '&lt;/textarea', $text );
     372
     373            ?>
     374            <input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" class="title sync-input" type="hidden" value="<?php echo esc_attr( $instance['title'] ); ?>">
     375            <textarea id="<?php echo $this->get_field_id( 'text' ); ?>" name="<?php echo $this->get_field_name( 'text' ); ?>" class="text sync-input" hidden><?php echo $escaped_text; ?></textarea>
     376            <input id="<?php echo $this->get_field_id( 'filter' ); ?>" name="<?php echo $this->get_field_name( 'filter' ); ?>" class="filter sync-input" type="hidden" value="on">
     377            <input id="<?php echo $this->get_field_id( 'visual' ); ?>" name="<?php echo $this->get_field_name( 'visual' ); ?>" class="visual sync-input" type="hidden" value="on">
    356378        <?php else : ?>
    357379            <input id="<?php echo $this->get_field_id( 'visual' ); ?>" name="<?php echo $this->get_field_name( 'visual' ); ?>" class="visual" type="hidden" value="">
Note: See TracChangeset for help on using the changeset viewer.