WordPress.org

Make WordPress Core

Ticket #8628: 8628.patch

File 8628.patch, 3.8 KB (added by azaozz, 6 years ago)
  • wp-includes/class.wp-dependencies.php

     
    2222        var $to_do = array(); 
    2323        var $done = array(); 
    2424        var $args = array(); 
     25        var $in_footer = array(); 
    2526 
    2627        function WP_Dependencies() { 
    2728                $args = func_get_args(); 
     
    4344                $handles = false === $handles ? $this->queue : (array) $handles; 
    4445                $this->all_deps( $handles ); 
    4546 
    46                 foreach( $this->to_do as $handle ) { 
     47                foreach( $this->to_do as $key => $handle ) { 
    4748                        if ( !in_array($handle, $this->done) && isset($this->registered[$handle]) ) { 
    48                                 if ( $this->registered[$handle]->src ) { // Else it defines a group. 
     49 
     50                                if ( ! $this->registered[$handle]->src ) { // Defines a group. 
     51                                        $this->done[] = $handle; 
     52                                        continue; 
     53                                } 
     54                                 
     55                                if ( $this->registered[$handle]->in_footer ) { 
     56                                        $this->in_footer[] = $handle; 
     57                                } else { 
    4958                                        $this->do_item( $handle ); 
     59                                        $this->done[] = $handle; 
    5060                                } 
    51                                 $this->done[] = $handle; 
     61 
     62                                unset($this->to_do[$key]); 
    5263                        } 
    5364                } 
    5465 
    55                 $this->to_do = array(); 
    5666                return $this->done; 
    5767        } 
     68         
     69        function do_footer_items() { 
    5870 
     71                if ( !empty($this->in_footer) ) { 
     72                        foreach( $this->in_footer as $key => $handle ) { 
     73                                if ( !in_array($handle, $this->done) && isset($this->registered[$handle]) ) { 
     74                                        $this->do_item( $handle ); 
     75                                        $this->done[] = $handle; 
     76                                        unset($this->in_footer[$key]); 
     77                                } 
     78                        } 
     79                } 
     80 
     81                return $this->done; 
     82        } 
     83 
    5984        function do_item( $handle ) { 
    6085                return isset($this->registered[$handle]); 
    6186        } 
     
    116141         * @param string ver (optional) Script version (used for cache busting) 
    117142         * @return array Hierarchical array of dependencies 
    118143         */ 
    119         function add( $handle, $src, $deps = array(), $ver = false, $args = null ) { 
     144        function add( $handle, $src, $deps = array(), $ver = false, $args = null, $in_footer = false ) { 
    120145                if ( isset($this->registered[$handle]) ) 
    121146                        return false; 
    122                 $this->registered[$handle] = new _WP_Dependency( $handle, $src, $deps, $ver, $args ); 
     147                $this->registered[$handle] = new _WP_Dependency( $handle, $src, $deps, $ver, $args, $in_footer ); 
    123148                return true; 
    124149        } 
    125150 
     
    189214        var $deps = array(); 
    190215        var $ver = false; 
    191216        var $args = null; 
     217        var $in_footer = false; 
    192218 
    193219        var $extra = array(); 
    194220 
    195221        function _WP_Dependency() { 
    196                 @list($this->handle, $this->src, $this->deps, $this->ver, $this->args) = func_get_args(); 
     222                @list($this->handle, $this->src, $this->deps, $this->ver, $this->args, $this->in_footer) = func_get_args(); 
    197223                if ( !is_array($this->deps) ) 
    198224                        $this->deps = array(); 
    199225                if ( !$this->ver ) 
  • wp-includes/default-filters.php

     
    183183add_action('sanitize_comment_cookies', 'sanitize_comment_cookies'); 
    184184add_action('admin_print_scripts', 'wp_print_scripts', 20); 
    185185add_action('admin_print_styles', 'wp_print_styles', 20); 
     186add_action('admin_footer', 'wp_print_footer_scripts', 20); 
    186187add_action('init', 'smilies_init', 5); 
    187188add_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 ); 
    188189add_action( 'shutdown', 'wp_ob_end_flush_all', 1); 
  • wp-includes/functions.wp-scripts.php

     
    3434        return $wp_scripts->do_items( $handles ); 
    3535} 
    3636 
     37function wp_print_footer_scripts() { 
     38        global $wp_scripts; 
     39         
     40        if ( !is_a($wp_scripts, 'WP_Scripts') ) 
     41                return array(); // No need to run if not instantiated. 
     42 
     43        return $wp_scripts->do_footer_items(); 
     44} 
     45 
    3746/** 
    3847 * Register new JavaScript file. 
    3948 *