do_shortcode()

最后更新于:2021-11-26 03:58:37

do_shortcode( string$content, bool$ignore_html=false)

Search content for shortcodes and filter shortcodes through their hooks.

参数

$content

(string) (Required) Content to search for shortcodes.

$ignore_html

(bool) (Optional) When true, shortcodes inside HTML elements will be skipped.

Default value: false

响应

(string) Content with shortcodes filtered out.

源文件

文件: gc-includes/shortcodes.php

function do_shortcode( $content, $ignore_html = false ) {
	global $shortcode_tags;

	if ( false === strpos( $content, '[' ) ) {
		return $content;
	}

	if ( empty( $shortcode_tags ) || ! is_array( $shortcode_tags ) ) {
		return $content;
	}

	// Find all registered tag names in $content.
	preg_match_all( '@[([^<>&/[]x00-x20=]++)@', $content, $matches );
	$tagnames = array_intersect( array_keys( $shortcode_tags ), $matches[1] );

	if ( empty( $tagnames ) ) {
		return $content;
	}

	$content = do_shortcodes_in_html_tags( $content, $ignore_html, $tagnames );

	$pattern = get_shortcode_regex( $tagnames );
	$content = preg_replace_callback( "/$pattern/", 'do_shortcode_tag', $content );

	// Always restore square braces so we don't break things like <!--[if IE ]>.
	$content = unescape_invalid_shortcodes( $content );

	return $content;
}
add_filter('get_comment_text', function ($comment) {
    $finalComment = '';
    $allowed = ['snippet', 'quote'];
    $parts = preg_split('/([/?w+])/', $comment, null, PREG_SPLIT_DELIM_CAPTURE);

    for ($i = 0; $i < sizeof($parts); $i++) {
        if (preg_match('/[w+]/', $parts[$i])) {
            $shortcodeName = substr($parts[$i], 1, -1);
            if (in_array($shortcodeName, $allowed)) {
                $finalComment .= do_shortcode($parts[$i] . $parts[$i+1] . $parts[$i+2]);
                echo '++' . $parts[$i] . $parts[$i+1] . $parts[$i+2] . '++' . $i;
                $i += 2;
            } else {
               $finalComment .= $parts[$i];  
            }
        } else {
            $finalComment .= $parts[$i];
        }
    }
    return $finalComment;
});