wp/wp-includes/shortcodes.php
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * WordPress API for creating bbcode like tags or what WordPress calls
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * "shortcodes." The tag and attribute parsing or regular expression code is
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * based on the Textpattern tag parser.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * A few examples are below:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * [shortcode /]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * [shortcode foo="bar" baz="bing" /]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * [shortcode foo="bar"]content[/shortcode]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * Shortcode tags support attributes and enclosed content, but does not entirely
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 * support inline shortcodes in other shortcodes. You will have to call the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * shortcode parser in your function to account for that.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * {@internal
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 * Please be aware that the above note was made during the beta of WordPress 2.6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 * and in the future may not be accurate. Please update the note when it is no
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
 * longer the case.}}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 * To apply shortcode tags to content:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 * <code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
 * $out = do_shortcode($content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
 * </code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
 * @link http://codex.wordpress.org/Shortcode_API
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
 * @subpackage Shortcodes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
 * @since 2.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
 * Container for storing shortcode tags and their hook to call for the shortcode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
 * @since 2.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
 * @name $shortcode_tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
 * @var array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
 * @global array $shortcode_tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
$shortcode_tags = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
 * Add hook for shortcode tag.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
 * There can only be one hook for each shortcode. Which means that if another
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
 * plugin has a similar shortcode, it will override yours or yours will override
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
 * theirs depending on which order the plugins are included and/or ran.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
 * Simplest example of a shortcode tag using the API:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
 * <code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
 * // [footag foo="bar"]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
 * function footag_func($atts) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
 * 	return "foo = {$atts[foo]}";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
 * }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
 * add_shortcode('footag', 'footag_func');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
 * </code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
 * Example with nice attribute defaults:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
 * <code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
 * // [bartag foo="bar"]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
 * function bartag_func($atts) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
 * 	extract(shortcode_atts(array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
 * 		'foo' => 'no foo',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
 * 		'baz' => 'default baz',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
 * 	), $atts));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
 * 	return "foo = {$foo}";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
 * }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
 * add_shortcode('bartag', 'bartag_func');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
 * </code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
 * Example with enclosed content:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
 * <code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
 * // [baztag]content[/baztag]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
 * function baztag_func($atts, $content='') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
 * 	return "content = $content";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
 * }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
 * add_shortcode('baztag', 'baztag_func');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
 * </code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
 * @since 2.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
 * @uses $shortcode_tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
 * @param string $tag Shortcode tag to be searched in post content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
 * @param callable $func Hook to run when shortcode is found.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
function add_shortcode($tag, $func) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
	global $shortcode_tags;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
	if ( is_callable($func) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
		$shortcode_tags[$tag] = $func;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
 * Removes hook for shortcode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
 * @since 2.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
 * @uses $shortcode_tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
 * @param string $tag shortcode tag to remove hook for.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
function remove_shortcode($tag) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
	global $shortcode_tags;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
	unset($shortcode_tags[$tag]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
 * Clear all shortcodes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
 * This function is simple, it clears all of the shortcode tags by replacing the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
 * shortcodes global by a empty array. This is actually a very efficient method
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
 * for removing all shortcodes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
 * @since 2.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
 * @uses $shortcode_tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
function remove_all_shortcodes() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
	global $shortcode_tags;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
	$shortcode_tags = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
 * Whether a registered shortcode exists named $tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
 * @global array $shortcode_tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
 * @param string $tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
 * @return boolean
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
function shortcode_exists( $tag ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
	global $shortcode_tags;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
	return array_key_exists( $tag, $shortcode_tags );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
 * Whether the passed content contains the specified shortcode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
 * @global array $shortcode_tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
 * @param string $tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
 * @return boolean
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
function has_shortcode( $content, $tag ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
	if ( shortcode_exists( $tag ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
		preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
		if ( empty( $matches ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
		foreach ( $matches as $shortcode ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
			if ( $tag === $shortcode[2] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
				return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
 * Search content for shortcodes and filter shortcodes through their hooks.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
 * If there are no shortcode tags defined, then the content will be returned
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
 * without any filtering. This might cause issues when plugins are disabled but
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
 * the shortcode will still show up in the post or content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
 * @since 2.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
 * @uses $shortcode_tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
 * @param string $content Content to search for shortcodes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
 * @return string Content with shortcodes filtered out.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
function do_shortcode($content) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
	global $shortcode_tags;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
	if (empty($shortcode_tags) || !is_array($shortcode_tags))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
		return $content;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
	$pattern = get_shortcode_regex();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
	return preg_replace_callback( "/$pattern/s", 'do_shortcode_tag', $content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
 * Retrieve the shortcode regular expression for searching.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
 * The regular expression combines the shortcode tags in the regular expression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
 * in a regex class.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
 * The regular expression contains 6 different sub matches to help with parsing.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
 * 2 - The shortcode name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
 * 3 - The shortcode argument list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
 * 4 - The self closing /
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
 * 5 - The content of a shortcode when it wraps some content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
 * @since 2.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
 * @uses $shortcode_tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
 * @return string The shortcode search regular expression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
function get_shortcode_regex() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
	global $shortcode_tags;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
	$tagnames = array_keys($shortcode_tags);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
	$tagregexp = join( '|', array_map('preg_quote', $tagnames) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
	// WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
	// Also, see shortcode_unautop() and shortcode.js.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
	return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
		  '\\['                              // Opening bracket
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
		. '(\\[?)'                           // 1: Optional second opening bracket for escaping shortcodes: [[tag]]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
		. "($tagregexp)"                     // 2: Shortcode name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
		. '(?![\\w-])'                       // Not followed by word character or hyphen
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
		. '('                                // 3: Unroll the loop: Inside the opening shortcode tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
		.     '[^\\]\\/]*'                   // Not a closing bracket or forward slash
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
		.     '(?:'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
		.         '\\/(?!\\])'               // A forward slash not followed by a closing bracket
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
		.         '[^\\]\\/]*'               // Not a closing bracket or forward slash
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
		.     ')*?'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
		. ')'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
		. '(?:'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
		.     '(\\/)'                        // 4: Self closing tag ...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
		.     '\\]'                          // ... and closing bracket
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
		. '|'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
		.     '\\]'                          // Closing bracket
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
		.     '(?:'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
		.         '('                        // 5: Unroll the loop: Optionally, anything between the opening and closing shortcode tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
		.             '[^\\[]*+'             // Not an opening bracket
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
		.             '(?:'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
		.                 '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
		.                 '[^\\[]*+'         // Not an opening bracket
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
		.             ')*+'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
		.         ')'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
		.         '\\[\\/\\2\\]'             // Closing shortcode tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
		.     ')?'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
		. ')'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
		. '(\\]?)';                          // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
 * Regular Expression callable for do_shortcode() for calling shortcode hook.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
 * @see get_shortcode_regex for details of the match array contents.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
 * @since 2.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
 * @uses $shortcode_tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
 * @param array $m Regular expression match array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
 * @return mixed False on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
function do_shortcode_tag( $m ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
	global $shortcode_tags;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
	// allow [[foo]] syntax for escaping a tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
	if ( $m[1] == '[' && $m[6] == ']' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
		return substr($m[0], 1, -1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
	$tag = $m[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
	$attr = shortcode_parse_atts( $m[3] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
	if ( isset( $m[5] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
		// enclosing tag - extra parameter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
		return $m[1] . call_user_func( $shortcode_tags[$tag], $attr, $m[5], $tag ) . $m[6];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
		// self-closing tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
		return $m[1] . call_user_func( $shortcode_tags[$tag], $attr, null,  $tag ) . $m[6];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
 * Retrieve all attributes from the shortcodes tag.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
 * The attributes list has the attribute name as the key and the value of the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
 * attribute as the value in the key/value pair. This allows for easier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
 * retrieval of the attributes, since all attributes have to be known.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
 * @since 2.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
 * @param string $text
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
 * @return array List of attributes and their value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
function shortcode_parse_atts($text) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
	$atts = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
	$pattern = '/(\w+)\s*=\s*"([^"]*)"(?:\s|$)|(\w+)\s*=\s*\'([^\']*)\'(?:\s|$)|(\w+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
	$text = preg_replace("/[\x{00a0}\x{200b}]+/u", " ", $text);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
	if ( preg_match_all($pattern, $text, $match, PREG_SET_ORDER) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
		foreach ($match as $m) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
			if (!empty($m[1]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
				$atts[strtolower($m[1])] = stripcslashes($m[2]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
			elseif (!empty($m[3]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
				$atts[strtolower($m[3])] = stripcslashes($m[4]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
			elseif (!empty($m[5]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
				$atts[strtolower($m[5])] = stripcslashes($m[6]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
			elseif (isset($m[7]) and strlen($m[7]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
				$atts[] = stripcslashes($m[7]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
			elseif (isset($m[8]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
				$atts[] = stripcslashes($m[8]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
		$atts = ltrim($text);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
	return $atts;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
 * Combine user attributes with known attributes and fill in defaults when needed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
 * The pairs should be considered to be all of the attributes which are
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
 * supported by the caller and given as a list. The returned attributes will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
 * only contain the attributes in the $pairs list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
 * If the $atts list has unsupported attributes, then they will be ignored and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
 * removed from the final returned list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
 * @since 2.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
 * @param array $pairs Entire list of supported attributes and their defaults.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
 * @param array $atts User defined attributes in shortcode tag.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
 * @param string $shortcode Optional. The name of the shortcode, provided for context to enable filtering
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
 * @return array Combined and filtered attribute list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
function shortcode_atts( $pairs, $atts, $shortcode = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
	$atts = (array)$atts;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
	$out = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
	foreach($pairs as $name => $default) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
		if ( array_key_exists($name, $atts) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
			$out[$name] = $atts[$name];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
			$out[$name] = $default;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
	 * Filter a shortcode's default attributes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
	 * If the third parameter of the shortcode_atts() function is present then this filter is available.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
	 * The third parameter, $shortcode, is the name of the shortcode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
	 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
	 * @param array $out The output array of shortcode attributes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
	 * @param array $pairs The supported attributes and their defaults.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
	 * @param array $atts The user defined shortcode attributes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
	if ( $shortcode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
		$out = apply_filters( "shortcode_atts_{$shortcode}", $out, $pairs, $atts );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
	return $out;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
 * Remove all shortcode tags from the given content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
 * @since 2.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
 * @uses $shortcode_tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
 * @param string $content Content to remove shortcode tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
 * @return string Content without shortcode tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
function strip_shortcodes( $content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
	global $shortcode_tags;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
	if (empty($shortcode_tags) || !is_array($shortcode_tags))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
		return $content;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
	$pattern = get_shortcode_regex();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
	return preg_replace_callback( "/$pattern/s", 'strip_shortcode_tag', $content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
function strip_shortcode_tag( $m ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
	// allow [[foo]] syntax for escaping a tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
	if ( $m[1] == '[' && $m[6] == ']' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
		return substr($m[0], 1, -1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
	return $m[1] . $m[6];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
add_filter('the_content', 'do_shortcode', 11); // AFTER wpautop()