/** * Prints the scripts that were queued for the footer or too late for the HTML head. * * @since 2.8 */ function print_footer_scripts() { global $wp_scripts, $concatenate_scripts; if (!is_a($wp_scripts, 'WP_Scripts')) { return array(); } // No need to run if not instantiated. script_concat_settings(); $wp_scripts->do_concat = $concatenate_scripts; $wp_scripts->do_footer_items(); if (apply_filters('print_footer_scripts', true)) { _print_scripts(); } $wp_scripts->reset(); return $wp_scripts->done; }
/** * Prints the scripts that were queued for the footer or too late for the HTML head. * * @since 2.8.0 * * @global WP_Scripts $wp_scripts * @global bool $concatenate_scripts * * @return array */ function print_footer_scripts() { global $wp_scripts, $concatenate_scripts; if (!$wp_scripts instanceof WP_Scripts) { return array(); // No need to run if not instantiated. } script_concat_settings(); $wp_scripts->do_concat = $concatenate_scripts; $wp_scripts->do_footer_items(); /** * Filter whether to print the footer scripts. * * @since 2.8.0 * * @param bool $print Whether to print the footer scripts. Default true. */ if (apply_filters('print_footer_scripts', true)) { _print_scripts(); } $wp_scripts->reset(); return $wp_scripts->done; }
/** * Processes a script dependency. * * @since 2.6.0 * @since 2.8.0 Added the `$group` parameter. * @access public * * @see WP_Dependencies::do_item() * * @param string $handle The script's registered handle. * @param int|false $group Optional. Group level: (int) level, (false) no groups. Default false. * @return bool True on success, false on failure. */ public function do_item($handle, $group = false) { if (!parent::do_item($handle)) { return false; } if (0 === $group && $this->groups[$handle] > 0) { $this->in_footer[] = $handle; return false; } if (false === $group && in_array($handle, $this->in_footer, true)) { $this->in_footer = array_diff($this->in_footer, (array) $handle); } $obj = $this->registered[$handle]; if (null === $obj->ver) { $ver = ''; } else { $ver = $obj->ver ? $obj->ver : $this->default_version; } if (isset($this->args[$handle])) { $ver = $ver ? $ver . '&' . $this->args[$handle] : $this->args[$handle]; } $src = $obj->src; $cond_before = $cond_after = ''; $conditional = isset($obj->extra['conditional']) ? $obj->extra['conditional'] : ''; if ($conditional) { $cond_before = "<!--[if {$conditional}]>\n"; $cond_after = "<![endif]-->\n"; } $before_handle = $this->print_inline_script($handle, 'before', false); $after_handle = $this->print_inline_script($handle, 'after', false); if ($before_handle) { $before_handle = sprintf("<script type='text/javascript'>\n%s\n</script>\n", $before_handle); } if ($after_handle) { $after_handle = sprintf("<script type='text/javascript'>\n%s\n</script>\n", $after_handle); } if ($this->do_concat) { /** * Filters the script loader source. * * @since 2.2.0 * * @param string $src Script loader source path. * @param string $handle Script handle. */ $srce = apply_filters('script_loader_src', $src, $handle); if ($this->in_default_dir($srce) && ($before_handle || $after_handle)) { $this->do_concat = false; // Have to print the so-far concatenated scripts right away to maintain the right order. _print_scripts(); $this->reset(); } elseif ($this->in_default_dir($srce) && !$conditional) { $this->print_code .= $this->print_extra_script($handle, false); $this->concat .= "{$handle},"; $this->concat_version .= "{$handle}{$ver}"; return true; } else { $this->ext_handles .= "{$handle},"; $this->ext_version .= "{$handle}{$ver}"; } } $has_conditional_data = $conditional && $this->get_data($handle, 'data'); if ($has_conditional_data) { echo $cond_before; } $this->print_extra_script($handle); if ($has_conditional_data) { echo $cond_after; } // A single item may alias a set of items, by having dependencies, but no source. if (!$obj->src) { return true; } if (!preg_match('|^(https?:)?//|', $src) && !($this->content_url && 0 === strpos($src, $this->content_url))) { $src = $this->base_url . $src; } if (!empty($ver)) { $src = add_query_arg('ver', $ver, $src); } /** This filter is documented in wp-includes/class.wp-scripts.php */ $src = esc_url(apply_filters('script_loader_src', $src, $handle)); if (!$src) { return true; } $tag = "{$cond_before}{$before_handle}<script type='text/javascript' src='{$src}'></script>\n{$after_handle}{$cond_after}"; /** * Filters the HTML script tag of an enqueued script. * * @since 4.1.0 * * @param string $tag The `<script>` tag for the enqueued script. * @param string $handle The script's registered handle. * @param string $src The script's source URL. */ $tag = apply_filters('script_loader_tag', $tag, $handle, $src); if ($this->do_concat) { $this->print_html .= $tag; } else { echo $tag; } return true; }