do_shortcode()
最后更新于:2021-11-26 03:58:37
do_shortcode( string$content, bool$ignore_html=false)Search content for shortcodes and filter shortcodes through their hooks.
参数
- $content
-
(string) (Required) Content to search for shortcodes.
- $ignore_html
-
(bool) (Optional) When true, shortcodes inside HTML elements will be skipped.
Default value: false
响应
(string) Content with shortcodes filtered out.
源文件
文件: gc-includes/shortcodes.php
function do_shortcode( $content, $ignore_html = false ) {
global $shortcode_tags;
if ( false === strpos( $content, '[' ) ) {
return $content;
}
if ( empty( $shortcode_tags ) || ! is_array( $shortcode_tags ) ) {
return $content;
}
// Find all registered tag names in $content.
preg_match_all( '@[([^<>&/[]x00-x20=]++)@', $content, $matches );
$tagnames = array_intersect( array_keys( $shortcode_tags ), $matches[1] );
if ( empty( $tagnames ) ) {
return $content;
}
$content = do_shortcodes_in_html_tags( $content, $ignore_html, $tagnames );
$pattern = get_shortcode_regex( $tagnames );
$content = preg_replace_callback( "/$pattern/", 'do_shortcode_tag', $content );
// Always restore square braces so we don't break things like <!--[if IE ]>.
$content = unescape_invalid_shortcodes( $content );
return $content;
}
add_filter('get_comment_text', function ($comment) { $finalComment = ''; $allowed = ['snippet', 'quote']; $parts = preg_split('/([/?w+])/', $comment, null, PREG_SPLIT_DELIM_CAPTURE); for ($i = 0; $i < sizeof($parts); $i++) { if (preg_match('/[w+]/', $parts[$i])) { $shortcodeName = substr($parts[$i], 1, -1); if (in_array($shortcodeName, $allowed)) { $finalComment .= do_shortcode($parts[$i] . $parts[$i+1] . $parts[$i+2]); echo '++' . $parts[$i] . $parts[$i+1] . $parts[$i+2] . '++' . $i; $i += 2; } else { $finalComment .= $parts[$i]; } } else { $finalComment .= $parts[$i]; } } return $finalComment; });