WordPress.org

Make WordPress Core

Ticket #12009: defer and async.patch

File defer and async.patch, 2.5 KB (added by scep, 6 years ago)
  • class.wp-scripts.php

     
    114114
    115115                $src = esc_url( apply_filters( 'script_loader_src', $src, $handle ) );
    116116
     117                $defer = isset($this->registered[$handle]->extra['defer'])?"defer='defer'":false;
     118                $async = isset($this->registered[$handle]->extra['async'])?"async='async'":false;
     119
    117120                if ( $this->do_concat )
    118                         $this->print_html .= "<script type='text/javascript' src='$src'></script>\n";
     121                        $this->print_html .= "<script type='text/javascript' src='$src' $defer $async ></script>\n";
    119122                else
    120                         echo "<script type='text/javascript' src='$src'></script>\n";
     123                        echo "<script type='text/javascript' src='$src' $defer $async ></script>\n";
    121124
    122125                return true;
    123126        }
  • functions.wp-scripts.php

     
    4949 * @param bool $in_footer (optional) Whether to enqueue the script before </head> or before </body>
    5050 * @return null
    5151 */
    52 function wp_register_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false ) {
     52function wp_register_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false, $defer = false, $async = false ) {
    5353        global $wp_scripts;
    5454        if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) {
    5555                if ( ! did_action( 'init' ) )
     
    6161        $wp_scripts->add( $handle, $src, $deps, $ver );
    6262        if ( $in_footer )
    6363                $wp_scripts->add_data( $handle, 'group', 1 );
     64        if ( $async )
     65                $wp_scripts->add_data( $handle, 'async', 1 );
     66        if ( $defer )
     67                $wp_scripts->add_data( $handle, 'defer', 1 );
     68
    6469}
    6570
    6671/**
     
    122127 * @since r16
    123128 * @see wp_register_script() For parameter information.
    124129 */
    125 function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false ) {
     130function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false, $defer = false, $async = false ) {
    126131        global $wp_scripts;
    127132        if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) {
    128133                if ( ! did_action( 'init' ) )
     
    136141                $wp_scripts->add( $_handle[0], $src, $deps, $ver );
    137142                if ( $in_footer )
    138143                        $wp_scripts->add_data( $_handle[0], 'group', 1 );
     144                if ( $async )
     145                        $wp_scripts->add_data( $handle, 'async', 1 );
     146                if ( $defer )
     147                        $wp_scripts->add_data( $handle, 'defer', 1 );
     148                       
    139149        }
    140150        $wp_scripts->enqueue( $handle );
    141151}