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

Search content for shortcodes and filter shortcodes through their hooks.


Description Description

If there are no shortcode tags defined, then the content will be returned without any filtering. This might cause issues when plugins are disabled but the shortcode will still show up in the post or content.


Parameters Parameters

$content

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

$ignore_html

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

Default value: false


Top ↑

Return Return

(string) Content with shortcodes filtered out.


Top ↑

Source Source

File: wp-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;
}

Top ↑

Changelog Changelog

Changelog
Version Description
2.5.0 Introduced.

Top ↑

More Information More Information

If there are no shortcode tags defined, then the content will be returned without any filtering. This might cause issues if a plugin is disabled as its shortcode will still show up in the post or content.



Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note 1 content
    Contributed by Codex
    // Use shortcode in a PHP file (outside the post editor).
    echo do_shortcode( '' );
    
    // In case there is opening and closing shortcode.
    echo do_shortcode( '[iscorrect]' . $text_to_be_wrapped_in_shortcode . '[/iscorrect]' );
    
    // Enable the use of shortcodes in text widgets.
    add_filter( 'widget_text', 'do_shortcode' );
    
    // Use shortcodes in form like Landing Page Template.
    echo do_shortcode( '[contact-form-7 id="91" title="quote"]' );
    
    // Store the short code in a variable.
    $var = do_shortcode( '' );
    echo $var;
    
  2. Skip to note 7 content
    Contributed by damianc

    To only allow specific shortcodes in comments:

    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;
    });
    

You must log in before being able to contribute a note or feedback.