do_shortcode( string $content, bool $ignore_html = false )
Search content for shortcodes and filter shortcodes through their hooks.
Contents
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
- $content
-
(string) (Required) Content to search for shortcodes.
- $ignore_html
-
(bool) (Optional) When true, shortcodes inside HTML elements will be skipped.
Default value: false
Return
(string) Content with shortcodes filtered out.
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.
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;
}
Expand full source code Collapse full source code View on Trac View on GitHub
Changelog
| Version | Description |
|---|---|
| 2.5.0 | Introduced. |
User Contributed Notes
You must log in before being able to contribute a note or feedback.
The most common use of the shortcode is the following
<?php echo do_shortcode('[name_of_shortcode]'); ?>Square brackets are required to echo the shortcode, not just the name of the shortcode.
echo do_shortcode( ' [my_shortcode] ' );This is not clear in the example.
Example
Hook shortcode in single posts
add_action( 'loop_start', 'shortcode_before_entry' ); function shortcode_before_entry() { if ( ! is_singular( 'post' ) ) { return; } echo do_shortcode('[your_shortcode_handle]'); }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; });Expand full source codeCollapse full source code
To allow shortcodes in comments:
function shortcodify($comment) { return do_shortcode($comment); } add_filter('comment_text', shortcodify); add_filter('get_comment_text', shortcodify);