WordPress.org

Make WordPress Core

Ticket #6518: shortcode-escaping-r7583.patch

File shortcode-escaping-r7583.patch, 1.3 KB (added by tellyworth, 6 years ago)
  • wordpress/wp-includes/shortcodes.php

     
    7575        $tagnames = array_keys($shortcode_tags); 
    7676        $tagregexp = join( '|', array_map('preg_quote', $tagnames) ); 
    7777 
    78         $pattern = '/\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\1\])?/s'; 
     78        $pattern = '/(.?)\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)/s'; 
    7979 
    8080        return preg_replace_callback($pattern, 'do_shortcode_tag', $content); 
    8181} 
    8282 
    8383function do_shortcode_tag($m) { 
    8484        global $shortcode_tags; 
     85         
     86        // allow [[foo]] syntax for escaping a tag 
     87        if ($m[1] == '[' && $m[6] == ']') { 
     88                return substr($m[0], 1, -1); 
     89        } 
    8590 
    86         $tag = $m[1]; 
    87         $attr = shortcode_parse_atts($m[2]); 
     91        $tag = $m[2]; 
     92        $attr = shortcode_parse_atts($m[3]); 
    8893 
    89         if ( isset($m[4]) ) { 
     94        if ( isset($m[5]) ) { 
    9095                // enclosing tag - extra parameter 
    91                 return call_user_func($shortcode_tags[$tag], $attr, $m[4]); 
     96                return $m[1] . call_user_func($shortcode_tags[$tag], $attr, $m[5]) . $m[6]; 
    9297        } else { 
    9398                // self-closing tag 
    94                 return call_user_func($shortcode_tags[$tag], $attr); 
     99                return $m[1] . call_user_func($shortcode_tags[$tag], $attr) . $m[6]; 
    95100        } 
    96101} 
    97102