get_shortcode_regex()

最后更新于:2021-11-27 00:14:11

get_shortcode_regex( array$tagnames=null)

Retrieve the shortcode regular expression for searching.

参数

$tagnames

(array) (Optional) List of shortcodes to find. Defaults to all registered shortcodes.

Default value: null

响应

(string) The shortcode search regular expression

源文件

文件: gc-includes/shortcodes.php

function get_shortcode_regex( $tagnames = null ) {
	global $shortcode_tags;

	if ( empty( $tagnames ) ) {
		$tagnames = array_keys( $shortcode_tags );
	}
	$tagregexp = implode( '|', 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.

	// phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
	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]].
	// phpcs:enable
}
/**
 * Detect shortcodes in the global $post.
 */
function gcdocs_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( 'gc', 'gcdocs_detect_shortcode' );
/**
 * Detect shortcodes in the global $post.
 */
function gcdocs_detect_shortcode() {
	global $gc_query;	
	$posts = $gc_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( 'gc', 'gcdocs_detect_shortcode' );