Make WordPress Core

Ticket #42548: 42548.0.diff

File 42548.0.diff, 2.7 KB (added by westonruter, 8 years ago)
  • src/wp-includes/widgets/class-wp-widget-custom-html.php

    diff --git src/wp-includes/widgets/class-wp-widget-custom-html.php src/wp-includes/widgets/class-wp-widget-custom-html.php
    index 855c3c5895..d5fefb90c4 100644
    class WP_Widget_Custom_HTML extends WP_Widget { 
    8585         *
    8686         * @since 4.8.1
    8787         *
     88         * @global WP_Post $post
    8889         * @param array $args     Display arguments including 'before_title', 'after_title',
    8990         *                        'before_widget', and 'after_widget'.
    9091         * @param array $instance Settings for the current Custom HTML widget instance.
    9192         */
    9293        public function widget( $args, $instance ) {
     94                global $post;
     95
     96                // Nullify the $post global during widget rendering to prevent shortcodes from running with the unexpected context on archive queries.
     97                $suspended_post = null;
     98                if ( isset( $post ) ) {
     99                        $suspended_post = $post;
     100                        $post = null;
     101                }
     102
     103                // Make sure post is always the queried object on singular queries (not from another sub-query that failed to clean up the global $post).
     104                if ( is_singular() ) {
     105                        $post = get_queried_object();
     106                }
    93107
    94108                $instance = array_merge( $this->default_instance, $instance );
    95109
    class WP_Widget_Custom_HTML extends WP_Widget { 
    118132                 */
    119133                $content = apply_filters( 'widget_custom_html_content', $content, $instance, $this );
    120134
     135                // Restore post global.
     136                if ( isset( $suspended_post ) ) {
     137                        $post = $suspended_post;
     138                }
     139
    121140                // Inject the Text widget's container class name alongside this widget's class name for theme styling compatibility.
    122141                $args['before_widget'] = preg_replace( '/(?<=\sclass=["\'])/', 'widget_text ', $args['before_widget'] );
    123142
  • src/wp-includes/widgets/class-wp-widget-text.php

    diff --git src/wp-includes/widgets/class-wp-widget-text.php src/wp-includes/widgets/class-wp-widget-text.php
    index ffcfe0cd09..c9008c0674 100644
    class WP_Widget_Text extends WP_Widget { 
    221221                        remove_filter( 'widget_text', 'do_shortcode', $widget_text_do_shortcode_priority );
    222222                }
    223223
    224                 // Nullify the $post global during widget rendering to prevent shortcodes from running with the unexpected context.
     224                // Nullify the $post global during widget rendering to prevent shortcodes from running with the unexpected context on archive queries.
    225225                $suspended_post = null;
    226226                if ( isset( $post ) ) {
    227227                        $suspended_post = $post;
    228228                        $post = null;
    229229                }
    230230
     231                // Make sure post is always the queried object on singular queries (not from another sub-query that failed to clean up the global $post).
     232                if ( is_singular() ) {
     233                        $post = get_queried_object();
     234                }
     235
    231236                /**
    232237                 * Filters the content of the Text widget.
    233238                 *