WordPress.org

Make WordPress Core

Ticket #22249: 22249.2.diff

File 22249.2.diff, 6.8 KB (added by ericlewis, 5 years ago)
  • src/wp-includes/class.wp-scripts.php

     
    190190                if ( ! $src )
    191191                        return true;
    192192
    193                 $tag = "{$cond_before}<script type='text/javascript' src='$src'></script>\n{$cond_after}";
     193                $attributes = $this->get_script_attributes( $handle, $src );
     194                $tag = "{$cond_before}<script$attributes></script>\n{$cond_after}";
    194195
    195196                /**
    196197                 * Filter the HTML script tag of an enqueued script.
     
    213214        }
    214215
    215216        /**
     217         * Concatenates attributes for the script tag
     218         *
     219         * @since  4.0.0
     220         *
     221         * @param  string $handle Script registered handle
     222         * @param  string $src    Script registered src
     223         *
     224         * @return string         Concatenated attributes string
     225         */
     226        public function get_script_attributes( $handle, $src ) {
     227
     228                $default_attributes = array(
     229                        'type' => 'text/javascript',
     230                        'src'  => $src
     231                );
     232
     233                $attributes = isset( $this->registered[ $handle ]->args['attributes'] )
     234                        ? (array) $this->registered[ $handle ]->args['attributes']
     235                        : array();
     236
     237                $attributes = wp_parse_args( $attributes, $default_attributes );
     238
     239                /**
     240                * Filter the script loader attributes.
     241                *
     242                * @since 4.1.0
     243                *
     244                * @param array  $attributes Array of script tag attributes.
     245                * @param string $handle     Script handle.
     246                * @param string $src        Script loader source path.
     247                */
     248                $attributes = apply_filters( 'script_loader_attributes', $attributes, $handle, $src );
     249                // Ensure source is set.
     250                $attributes['src'] = isset( $attributes['src'] ) ? $attributes['src'] : $src;
     251
     252                $concat_attributes = '';
     253                foreach ( $attributes as $attribute => $attribute_value ) {
     254                        if ( ! is_null( $attribute ) && ! is_null( $attribute_value ) ) {
     255                                $concat_attributes .= ' '. esc_attr( $attribute ) .'="'. esc_attr( $attribute_value ) .'"';
     256                        }
     257                }
     258
     259                return $concat_attributes;
     260        }
     261
     262        /**
    216263         * Localizes a script, only if the script has already been added
    217264         *
    218265         * @param string $handle
  • src/wp-includes/functions.wp-scripts.php

     
    9595 *
    9696 * @since 2.6.0
    9797 * @since 4.3.0 A return value was added.
     98 * @since 4.5.0 The fifth argument was changed to an array of options.
    9899 *
    99100 * @param string      $handle    Name of the script. Should be unique.
    100101 * @param string      $src       Path to the script from the WordPress root directory. Example: '/js/myscript.js'.
     
    104105 *                               to end of path as a query string. If no version is specified or set to false, a version
    105106 *                               number is automatically added equal to current installed WordPress version.
    106107 *                               If set to null, no version is added. Default 'false'. Accepts 'false', 'null', or 'string'.
    107  * @param bool        $in_footer Optional. Whether to enqueue the script before </head> or before </body>.
    108  *                               Default 'false'. Accepts 'false' or 'true'.
     108 * @param array       $args {
     109 *     Optional script arguments.
     110 *
     111 *     @type bool  $in_footer  Whether to enqueue the script before </head> or before </body>.
     112 *                             Default 'false'. Accepts 'false' or 'true'.
     113 *     @type array $attributes Array of script tag attributes.
     114 *                             Default: array( 'type' => 'text/javascript' )
     115 * }
    109116 * @return bool Whether the script has been registered. True on success, false on failure.
    110117 */
    111 function wp_register_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false ) {
     118function wp_register_script( $handle, $src, $deps = array(), $ver = false, $args = array() ) {
    112119        $wp_scripts = wp_scripts();
    113120        _wp_scripts_maybe_doing_it_wrong( __FUNCTION__ );
    114121
    115         $registered = $wp_scripts->add( $handle, $src, $deps, $ver );
    116         if ( $in_footer ) {
     122        // Back-compat. If the fifth argument is not an array, it's `in_footer`.
     123        $args = ! is_array( $args ) ? array( 'in_footer' => (bool) $args ) : $args;
     124        $args = wp_parse_args( $args, array(
     125                'in_footer'  => false,
     126                'attributes' => array(),
     127        ) );
     128
     129        $attributes = wp_parse_args( $args['attributes'], array( 'type' => 'text/javascript' ) );
     130
     131        $registered = $wp_scripts->add( $handle, $src, $deps, $ver, array( 'attributes' => $attributes ) );
     132        if ( $args['in_footer'] ) {
    117133                $wp_scripts->add_data( $handle, 'group', 1 );
    118134        }
    119135
     
    211227 * @see WP_Dependencies::enqueue()
    212228 *
    213229 * @since 2.6.0
     230 * @since 4.5.0 The fifth argument was changed to an array of options.
    214231 *
    215232 * @param string      $handle    Name of the script.
    216233 * @param string|bool $src       Path to the script from the root directory of WordPress. Example: '/js/myscript.js'.
     
    218235 * @param string|bool $ver       Optional. String specifying the script version number, if it has one. This parameter
    219236 *                               is used to ensure that the correct version is sent to the client regardless of caching,
    220237 *                               and so should be included if a version number is available and makes sense for the script.
    221  * @param bool        $in_footer Optional. Whether to enqueue the script before </head> or before </body>.
    222  *                               Default 'false'. Accepts 'false' or 'true'.
     238 * @param array       $args {
     239 *     Optional script arguments.
     240 *
     241 *     @type bool  $in_footer  Whether to enqueue the script before </head> or before </body>.
     242 *                             Default 'false'. Accepts 'false' or 'true'.
     243 *     @type array $attributes Array of script tag attributes.
     244 *                             Default: array( 'type' => 'text/javascript' )
     245 * }
    223246 */
    224 function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false ) {
     247function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $args = array() ) {
    225248        $wp_scripts = wp_scripts();
    226249
    227250        _wp_scripts_maybe_doing_it_wrong( __FUNCTION__ );
    228251
     252        // Back-compat. If the fifth argument is not an array, it's `in_footer`.
     253        $args = ! is_array( $args ) ? array( 'in_footer' => (bool) $args ) : $args;
     254        $args = wp_parse_args( $args, array(
     255                'in_footer'  => false,
     256                'attributes' => array(),
     257        ) );
    229258
     259        $attributes = wp_parse_args( $args['attributes'], array( 'type' => 'text/javascript' ) );
     260
    230261        if ( $src || $in_footer ) {
    231262                $_handle = explode( '?', $handle );
    232263
    233264                if ( $src ) {
    234                         $wp_scripts->add( $_handle[0], $src, $deps, $ver );
     265                        $wp_scripts->add( $_handle[0], $src, $deps, $ver, array( 'attributes' => $attributes ) );
    235266                }
    236267
    237                 if ( $in_footer ) {
     268                if ( $args['in_footer'] ) {
    238269                        $wp_scripts->add_data( $_handle[0], 'group', 1 );
    239270                }
    240271        }