get_shortcode_regex()获取短标签的正则表达式

目录

描述

Returns regular expression used to search for shortcodes inside posts.

This function combines all registered shortcode tags into a single regular expression.

get_shortcode_regex() 描述

用法

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
<?phpfunction your_prefix_detect_shortcode(){    global $post;    $pattern = get_shortcode_regex();    if (   preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )        && array_key_exists( 2, $matches )        && in_array( 'your-shortcode', $matches[2] ) )    {        // shortcode is being used    }}add_action( 'wp', 'your_prefix_detect_shortcode' );?>

This can only be used when $post is available. 'wp' is the earliest action you can hook into to get access to it.

Note: The example that previously appeared on this page used preg_match() instead of preg_match_all(), so it only detected the first shortcode used on the page. You should update any code that uses that example with the current example in order to fix that bug.

The following code is an adjustment of the first example, but able to also search all posts on the index page.

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
function your_prefix_detect_shortcode(){    global $wp_query;	    $posts = $wp_query->posts;    $pattern = get_shortcode_regex();            foreach ($posts as $post){		if (   preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )			&& array_key_exists( 2, $matches )			&& in_array( 'videoannotation', $matches[2] ) )		{			// enque my css and js			break;			}        }}add_action( 'wp', 'your_prefix_detect_shortcode' );

get_shortcode_regex() 用法

参数

None

get_shortcode_regex() 参数

返回值

(string

The shortcode search regular expression.

get_shortcode_regex() 返回值

历史

添加于 版本: 2.5

get_shortcode_regex() 历史

源文件

get_shortcode_regex() 函数的代码位于 wp-includes/shortcodes.php.

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
/**
 * Retrieve the shortcode regular expression for searching.
 *
 * The regular expression combines the shortcode tags in the regular expression
 * in a regex class.
 *
 * The regular expression contains 6 different sub matches to help with parsing.
 *
 * 1 - An extra [ 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.
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags
 *
 * @return string The shortcode search regular expression
 */
function get_shortcode_regex() {
	global $shortcode_tags;
	$tagnames = array_keys($shortcode_tags);
	$tagregexp = join( '|', array_map('preg_quote', $tagnames) );

	// WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
	// Also, see shortcode_unautop() and shortcode.js.
	return
		  '\['                              // Opening bracket
		. '(\[?)'                           // 1: Optional second opening bracket for escaping shortcodes: [[tag]]
		. "($tagregexp)"                     // 2: Shortcode name
		. '(?![\w-])'                       // Not followed by word character or hyphen
		. '('                                // 3: Unroll the loop: Inside the opening shortcode tag
		.     '[^\]\/]*'                   // Not a closing bracket or forward slash
		.     '(?:'
		.         '\/(?!\])'               // A forward slash not followed by a closing bracket
		.         '[^\]\/]*'               // Not a closing bracket or forward slash
		.     ')*?'
		. ')'
		. '(?:'
		.     '(\/)'                        // 4: Self closing tag ...
		.     '\]'                          // ... and closing bracket
		. '|'
		.     '\]'                          // Closing bracket
		.     '(?:'
		.         '('                        // 5: Unroll the loop: Optionally, anything between the opening and closing shortcode tags
		.             '[^\[]*+'             // Not an opening bracket
		.             '(?:'
		.                 '\[(?!\/\2\])' // An opening bracket not followed by the closing shortcode tag
		.                 '[^\[]*+'         // Not an opening bracket
		.             ')*+'
		.         ')'
		.         '\[\/\2\]'             // Closing shortcode tag
		.     ')?'
		. ')'
		. '(\]?)';                          // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
}

get_shortcode_regex() 源文件

相关