Bail early from shortcode functions if no delimiter is present.

This is a significant performance improvement for processing content without shortcodes, and only the slightest hit when content contains shortcodes (which must then undergo processing anyway). Performance results on the ticket.

props TobiasBg.
fixes #23855.

Built from https://develop.svn.wordpress.org/trunk@27394


git-svn-id: http://core.svn.wordpress.org/trunk@27242 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Andrew Nacin 2014-03-04 07:11:13 +00:00
parent 4c7c24ecbf
commit 5468377d3e

View File

@ -155,6 +155,10 @@ function shortcode_exists( $tag ) {
* @return boolean * @return boolean
*/ */
function has_shortcode( $content, $tag ) { function has_shortcode( $content, $tag ) {
if ( false === strpos( $content, '[' ) ) {
return false;
}
if ( shortcode_exists( $tag ) ) { if ( shortcode_exists( $tag ) ) {
preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ); preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER );
if ( empty( $matches ) ) if ( empty( $matches ) )
@ -186,6 +190,10 @@ function has_shortcode( $content, $tag ) {
function do_shortcode($content) { function do_shortcode($content) {
global $shortcode_tags; global $shortcode_tags;
if ( false === strpos( $content, '[' ) ) {
return $content;
}
if (empty($shortcode_tags) || !is_array($shortcode_tags)) if (empty($shortcode_tags) || !is_array($shortcode_tags))
return $content; return $content;
@ -375,6 +383,10 @@ function shortcode_atts( $pairs, $atts, $shortcode = '' ) {
function strip_shortcodes( $content ) { function strip_shortcodes( $content ) {
global $shortcode_tags; global $shortcode_tags;
if ( false === strpos( $content, '[' ) ) {
return $content;
}
if (empty($shortcode_tags) || !is_array($shortcode_tags)) if (empty($shortcode_tags) || !is_array($shortcode_tags))
return $content; return $content;