Introduce a simple mechanism for escaping shortcodes by doubling the [[]]. Fixes #6518 props tellyworth.
git-svn-id: http://svn.automattic.com/wordpress/trunk@10576 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
ea903eba7e
commit
e5003996e3
|
@ -156,7 +156,15 @@ function do_shortcode($content) {
|
||||||
*
|
*
|
||||||
* The regular expression combines the shortcode tags in the regular expression
|
* The regular expression combines the shortcode tags in the regular expression
|
||||||
* in a regex class.
|
* in a regex class.
|
||||||
*
|
*
|
||||||
|
* The regular expresion contains 6 different sub matches to help with parsing.
|
||||||
|
*
|
||||||
|
* 1/6 - An extra [ or ] to allow for escaping shortcodes with double [[]]
|
||||||
|
* 2 - The shortcode name
|
||||||
|
* 3 - The shortcode argument list
|
||||||
|
* 4 - The self closing /
|
||||||
|
* 5 - The content of a shortcode when it wraps some content.
|
||||||
|
*
|
||||||
* @since 2.5
|
* @since 2.5
|
||||||
* @uses $shortcode_tags
|
* @uses $shortcode_tags
|
||||||
*
|
*
|
||||||
|
@ -167,11 +175,12 @@ function get_shortcode_regex() {
|
||||||
$tagnames = array_keys($shortcode_tags);
|
$tagnames = array_keys($shortcode_tags);
|
||||||
$tagregexp = join( '|', array_map('preg_quote', $tagnames) );
|
$tagregexp = join( '|', array_map('preg_quote', $tagnames) );
|
||||||
|
|
||||||
return '\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\1\])?';
|
return '(.?)\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Regular Expression callable for do_shortcode() for calling shortcode hook.
|
* Regular Expression callable for do_shortcode() for calling shortcode hook.
|
||||||
|
* @see get_shortcode_regex for details of the match array contents.
|
||||||
*
|
*
|
||||||
* @since 2.5
|
* @since 2.5
|
||||||
* @access private
|
* @access private
|
||||||
|
@ -183,15 +192,20 @@ function get_shortcode_regex() {
|
||||||
function do_shortcode_tag($m) {
|
function do_shortcode_tag($m) {
|
||||||
global $shortcode_tags;
|
global $shortcode_tags;
|
||||||
|
|
||||||
$tag = $m[1];
|
// allow [[foo]] syntax for escaping a tag
|
||||||
$attr = shortcode_parse_atts($m[2]);
|
if ($m[1] == '[' && $m[6] == ']') {
|
||||||
|
return substr($m[0], 1, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$tag = $m[2];
|
||||||
|
$attr = shortcode_parse_atts($m[3]);
|
||||||
|
|
||||||
if ( isset($m[4]) ) {
|
if ( isset($m[5]) ) {
|
||||||
// enclosing tag - extra parameter
|
// enclosing tag - extra parameter
|
||||||
return call_user_func($shortcode_tags[$tag], $attr, $m[4], $tag);
|
return $m[1] . call_user_func($shortcode_tags[$tag], $attr, $m[5]) . $m[6];
|
||||||
} else {
|
} else {
|
||||||
// self-closing tag
|
// self-closing tag
|
||||||
return call_user_func($shortcode_tags[$tag], $attr, NULL, $tag);
|
return $m[1] . call_user_func($shortcode_tags[$tag], $attr) . $m[6];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue