WordPress.org

Make WordPress Core

Ticket #8628: 8628.patch

File 8628.patch, 3.8 KB (added by azaozz, 9 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 *