Make WordPress Core


Ignore:
Timestamp:
09/20/2022 10:29:55 AM (3 years ago)
Author:
audrasjb
Message:

Shortcodes: Reverse wrapping of apply_shortcodes() and do_shortcode().

This changeset reverses the wrapping of apply_shortcodes() and do_shortcode() such that apply_shortcodes() is now the recommended function. In addition:

  • Calls to do_shortcode() have been changed to apply_shortcodes().
  • Some default filter callbacks have been changed from 'do_shortcode' to 'apply_shortcodes'.
  • Applicable documentation has been updated to refer to apply_shortcodes() instead.

Follow-up to [47004].

Props SergeyBiryukov, rafiahmedd, namithjawahar, peterwilsoncc, costdev.
Fixes #55883.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/shortcodes.php

    r53585 r54248  
    2222 * To apply shortcode tags to content:
    2323 *
    24  *     $out = do_shortcode( $content );
     24 *     $out = apply_shortcodes( $content );
    2525 *
    2626 * @link https://developer.wordpress.org/plugins/shortcodes/
     
    172172 * Searches content for shortcodes and filter shortcodes through their hooks.
    173173 *
    174  * This function is an alias for do_shortcode().
     174 * If there are no shortcode tags defined, then the content will be returned
     175 * without any filtering. This might cause issues when plugins are disabled but
     176 * the shortcode will still show up in the post or content.
    175177 *
    176178 * @since 5.4.0
    177179 *
    178  * @see do_shortcode()
     180 * @global array $shortcode_tags List of shortcode tags and their callback hooks.
    179181 *
    180182 * @param string $content     Content to search for shortcodes.
     
    184186 */
    185187function apply_shortcodes( $content, $ignore_html = false ) {
    186     return do_shortcode( $content, $ignore_html );
     188    global $shortcode_tags;
     189
     190    if ( false === strpos( $content, '[' ) ) {
     191        return $content;
     192    }
     193
     194    if ( empty( $shortcode_tags ) || ! is_array( $shortcode_tags ) ) {
     195        return $content;
     196    }
     197
     198    // Find all registered tag names in $content.
     199    preg_match_all( '@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches );
     200    $tagnames = array_intersect( array_keys( $shortcode_tags ), $matches[1] );
     201
     202    if ( empty( $tagnames ) ) {
     203        return $content;
     204    }
     205
     206    $content = do_shortcodes_in_html_tags( $content, $ignore_html, $tagnames );
     207
     208    $pattern = get_shortcode_regex( $tagnames );
     209    $content = preg_replace_callback( "/$pattern/", 'do_shortcode_tag', $content );
     210
     211    // Always restore square braces so we don't break things like <!--[if IE ]>.
     212    $content = unescape_invalid_shortcodes( $content );
     213
     214    return $content;
    187215}
    188216
     
    190218 * Searches content for shortcodes and filter shortcodes through their hooks.
    191219 *
    192  * If there are no shortcode tags defined, then the content will be returned
    193  * without any filtering. This might cause issues when plugins are disabled but
    194  * the shortcode will still show up in the post or content.
    195  *
    196  * @since 2.5.0
    197  *
    198  * @global array $shortcode_tags List of shortcode tags and their callback hooks.
     220 * This function is an alias for apply_shortcodes().
     221 *
     222 * @since 2.5.0
     223 *
     224 * @see apply_shortcodes()
    199225 *
    200226 * @param string $content     Content to search for shortcodes.
     
    204230 */
    205231function do_shortcode( $content, $ignore_html = false ) {
    206     global $shortcode_tags;
    207 
    208     if ( false === strpos( $content, '[' ) ) {
    209         return $content;
    210     }
    211 
    212     if ( empty( $shortcode_tags ) || ! is_array( $shortcode_tags ) ) {
    213         return $content;
    214     }
    215 
    216     // Find all registered tag names in $content.
    217     preg_match_all( '@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches );
    218     $tagnames = array_intersect( array_keys( $shortcode_tags ), $matches[1] );
    219 
    220     if ( empty( $tagnames ) ) {
    221         return $content;
    222     }
    223 
    224     $content = do_shortcodes_in_html_tags( $content, $ignore_html, $tagnames );
    225 
    226     $pattern = get_shortcode_regex( $tagnames );
    227     $content = preg_replace_callback( "/$pattern/", 'do_shortcode_tag', $content );
    228 
    229     // Always restore square braces so we don't break things like <!--[if IE ]>.
    230     $content = unescape_invalid_shortcodes( $content );
    231 
    232     return $content;
     232    return apply_shortcodes( $content, $ignore_html );
    233233}
    234234
     
    300300
    301301/**
    302  * Regular Expression callable for do_shortcode() for calling shortcode hook.
     302 * Regular Expression callable for apply_shortcodes() for calling shortcode hook.
    303303 *
    304304 * @see get_shortcode_regex() for details of the match array contents.
Note: See TracChangeset for help on using the changeset viewer.