函数文档

strip_shortcodes()

💡 云策文档标注

概述

strip_shortcodes() 函数用于从给定内容中移除所有已注册的短代码标签。它通过正则表达式匹配和过滤机制实现,确保只处理当前有效的短代码。

关键要点

  • 函数接受一个字符串参数 $content,返回移除短代码后的内容。
  • 仅移除在 $shortcode_tags 全局变量中注册的短代码,未注册的短代码(如插件停用后的残留)不会被移除。
  • 使用 strip_shortcodes_tagnames 过滤器可以自定义要移除的短代码标签列表。
  • 内部调用 do_shortcodes_in_html_tags()、get_shortcode_regex() 和 unescape_invalid_shortcodes() 等辅助函数以确保正确处理。

代码示例

/**
 * Remove shortcodes if we are on the home page
 *
 * @param string $content Post content.
 * @return string (Maybe) modified post content.
 */
function wpdocs_remove_shortcode_from_index( $content ) {
    if ( is_home() ) {
        $content = strip_shortcodes( $content );
    }
    return $content;
}
add_filter( 'the_content', 'wpdocs_remove_shortcode_from_index' );

注意事项

  • 函数不会移除未注册的短代码,开发者需通过 strip_shortcodes_tagnames 过滤器手动处理此类情况。
  • 在 WordPress 2.5.0 版本中引入,常用于 wp_trim_excerpt() 等核心函数。

📄 原文内容

Removes all shortcode tags from the given content.

Parameters

$contentstringrequired
Content to remove shortcode tags.

Return

string Content without shortcode tags.

Source

function strip_shortcodes( $content ) {
	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 );

	$tags_to_remove = array_keys( $shortcode_tags );

	/**
	 * Filters the list of shortcode tags to remove from the content.
	 *
	 * @since 4.7.0
	 *
	 * @param array  $tags_to_remove Array of shortcode tags to remove.
	 * @param string $content        Content shortcodes are being removed from.
	 */
	$tags_to_remove = apply_filters( 'strip_shortcodes_tagnames', $tags_to_remove, $content );

	$tagnames = array_intersect( $tags_to_remove, $matches[1] );

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

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

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

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

	return $content;
}

Hooks

apply_filters( ‘strip_shortcodes_tagnames’, array $tags_to_remove, string $content )

Filters the list of shortcode tags to remove from the content.

Changelog

Version Description
2.5.0 Introduced.

User Contributed Notes

  1. Skip to note 3 content

    It is worth to note that this function removes only those shortcodes which are registered at the moment of the processing of this function. If there are any “leftovers” shortcodes, like those which were added by some plugin but that plugin is not active anymore, this function WILL NOT strip them. It is possible to check which shortcodes may and will be stripped with the help of this filter strip_shortcodes_tagnames

  2. Skip to note 4 content

    Strip shortcodes on home page but not on single or archive pages
    When viewing posts ‘home’ page, strip all shortcodes, but on other pages, such as single.php, do not strip the shortcodes.

    /**
     * Remove shortcodes if we are on the home page
     *
     * @param string $content Post content.
     * @return string (Maybe) modified post content.
     */
    function wpdocs_remove_shortcode_from_index( $content ) {
    	if ( is_home() ) {
    		$content = strip_shortcodes( $content );
    	}
    	return $content;
    }
    add_filter( 'the_content', 'wpdocs_remove_shortcode_from_index' );