do_shortcode

The timeline below displays how wordpress function do_shortcode has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.3

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content     Content to search for shortcodes.
 * @param bool   $ignore_html When true, shortcodes inside HTML elements will be skipped.
 *                            Default false.
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content, $ignore_html = false)
{
    global $shortcode_tags;
    if (!str_contains($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;
    }
    // Ensure this context is only added once if shortcodes are nested.
    $has_filter = has_filter('wp_get_attachment_image_context', '_filter_do_shortcode_context');
    $filter_added = false;
    if (!$has_filter) {
        $filter_added = add_filter('wp_get_attachment_image_context', '_filter_do_shortcode_context');
    }
    $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);
    // Only remove the filter if it was added in this scope.
    if ($filter_added) {
        remove_filter('wp_get_attachment_image_context', '_filter_do_shortcode_context');
    }
    return $content;
}

WordPress Version: 6.1

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content     Content to search for shortcodes.
 * @param bool   $ignore_html When true, shortcodes inside HTML elements will be skipped.
 *                            Default false.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 5.4

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content     Content to search for shortcodes.
 * @param bool   $ignore_html When true, shortcodes inside HTML elements will be skipped.
 *                            Default false.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 3.2

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: .16

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 2.3

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: .20

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 2.2

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: .19

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 1.2

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: .17

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 0.3

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: .20

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 9.3

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: .24

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 6.3

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: .27

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 5.4

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: .30

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 4.4

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: .31

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 4.1

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 4.4

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
}

WordPress Version: 3.4

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: .32

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 2.4

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: .36

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: .20

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 2.2

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .10

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 4.2

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
 *
 * @param string $content Content to search for shortcodes.
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: 1.6

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 1.5

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .40

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 1.4

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .39

/**
 * Searches content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: .30

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 1.3

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .20

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 1.2

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .10

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 4.1

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: 0.6

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 0.4

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .30

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 0.3

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .20

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 0.2

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .10

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 4.0

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: 9.7

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 9.2

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .10

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 3.9

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (false === strpos($content, '[')) {
        return $content;
    }
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: 8.9

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 8.4

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .30

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 8.3

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .20

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 8.2

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .10

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 3.8

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: 7.9

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 7.5

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .40

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 7.4

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .30

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 7.3

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .20

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 7.2

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}

WordPress Version: .10

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
 * @return string Content with shortcodes filtered out.
 */
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;
    }
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    $pattern = "/\\[({$tagregexp})/s";
    if (1 !== preg_match($pattern, $content)) {
        // Avoids parsing HTML when there are no shortcodes or embeds anyway.
        return $content;
    }
    $content = do_shortcodes_in_html_tags($content, $ignore_html);
    $pattern = get_shortcode_regex();
    $content = preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
    // Always restore square braces so we don't break things like <!--[if IE ]>
    $content = unescape_invalid_shortcodes($content);
    return $content;
}

WordPress Version: 3.7

/**
 * Search content for shortcodes and filter shortcodes through their hooks.
 *
 * 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.
 *
 * @since 2.5
 * @uses $shortcode_tags
 * @uses get_shortcode_regex() Gets the search pattern for searching shortcodes.
 *
 * @param string $content Content to search for shortcodes
 * @return string Content with shortcodes filtered out.
 */
function do_shortcode($content)
{
    global $shortcode_tags;
    if (empty($shortcode_tags) || !is_array($shortcode_tags)) {
        return $content;
    }
    $pattern = get_shortcode_regex();
    return preg_replace_callback("/{$pattern}/s", 'do_shortcode_tag', $content);
}