WordPress.org

Make WordPress Core

Ticket #12009: defer and async.patch

File defer and async.patch, 2.5 KB (added by scep, 3 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}