WordPress.org

Make WordPress Core

Ticket #22249: 22249.diff

File 22249.diff, 4.1 KB (added by jtsternberg, 6 years ago)

New method, get_script_attributes, to concatenate an array of script attributes passed through a filter.

  • src/wp-includes/class.wp-scripts.php

     
    8282        }
    8383
    8484        public function do_item( $handle, $group = false ) {
    85                 if ( !parent::do_item($handle) )
     85                if ( !parent::do_item( $handle ) ) {
    8686                        return false;
     87                }
    8788
    88                 if ( 0 === $group && $this->groups[$handle] > 0 ) {
     89                if ( 0 === $group && $this->groups[ $handle ] > 0 ) {
    8990                        $this->in_footer[] = $handle;
    9091                        return false;
    9192                }
    9293
    93                 if ( false === $group && in_array($handle, $this->in_footer, true) )
     94                if ( false === $group && in_array($handle, $this->in_footer, true) ) {
    9495                        $this->in_footer = array_diff( $this->in_footer, (array) $handle );
     96                }
    9597
    96                 if ( null === $this->registered[$handle]->ver )
     98                if ( null === $this->registered[ $handle ]->ver ) {
    9799                        $ver = '';
    98                 else
    99                         $ver = $this->registered[$handle]->ver ? $this->registered[$handle]->ver : $this->default_version;
     100                } else {
     101                        $ver = $this->registered[ $handle ]->ver ? $this->registered[ $handle ]->ver : $this->default_version;
     102                }
    100103
    101                 if ( isset($this->args[$handle]) )
    102                         $ver = $ver ? $ver . '&' . $this->args[$handle] : $this->args[$handle];
     104                if ( isset( $this->args[ $handle ] ) ) {
     105                        $ver = $ver ? $ver . '&' . $this->args[ $handle ] : $this->args[ $handle ];
     106                }
    103107
    104                 $src = $this->registered[$handle]->src;
     108                $src = $this->registered[ $handle ]->src;
    105109
    106110                if ( $this->do_concat ) {
    107111                        /**
     
    113117                         * @param string $handle Script handle.
    114118                         */
    115119                        $srce = apply_filters( 'script_loader_src', $src, $handle );
    116                         if ( $this->in_default_dir($srce) ) {
     120                        if ( $this->in_default_dir( $srce ) ) {
    117121                                $this->print_code .= $this->print_extra_script( $handle, false );
    118122                                $this->concat .= "$handle,";
    119123                                $this->concat_version .= "$handle$ver";
     
    125129                }
    126130
    127131                $this->print_extra_script( $handle );
    128                 if ( !preg_match('|^(https?:)?//|', $src) && ! ( $this->content_url && 0 === strpos($src, $this->content_url) ) ) {
     132                if ( !preg_match( '|^(https?:)?//|', $src ) && ! ( $this->content_url && 0 === strpos( $src, $this->content_url ) ) ) {
    129133                        $src = $this->base_url . $src;
    130134                }
    131135
    132                 if ( !empty($ver) )
     136                if ( !empty( $ver ) ) {
    133137                        $src = add_query_arg('ver', $ver, $src);
     138                }
    134139
    135140                /** This filter is documented in wp-includes/class.wp-scripts.php */
    136141                $src = esc_url( apply_filters( 'script_loader_src', $src, $handle ) );
    137142
    138                 if ( ! $src )
     143                if ( ! $src ) {
    139144                        return true;
     145                }
    140146
    141                 if ( $this->do_concat )
    142                         $this->print_html .= "<script type='text/javascript' src='$src'></script>\n";
    143                 else
    144                         echo "<script type='text/javascript' src='$src'></script>\n";
     147                $attributes = $this->get_script_attributes( $handle, $src );
     148                $script_tag = "<script$attributes src='$src'></script>\n";
    145149
     150                if ( $this->do_concat ) {
     151                        $this->print_html .= $script_tag;
     152                } else {
     153                        echo $script_tag;
     154                }
     155
    146156                return true;
    147157        }
    148158
    149159        /**
     160         * Concatenates attributes for the script tag
     161         *
     162         * @since  4.0.0
     163         *
     164         * @param  string $handle Script registered handle
     165         * @param  string $src    Script registered src
     166         *
     167         * @return string         Concatenated attributes string
     168         */
     169        public function get_script_attributes( $handle, $src ) {
     170                $default_attributes = array( 'type' => 'text/javascript' );
     171
     172                /**
     173                 * Filter the script loader attributes.
     174                 *
     175                 * @since 4.0.0
     176                 *
     177                 * @param array  $default_attributes Array of default script tag attributes.
     178                 * @param string $handle             Script handle.
     179                 * @param string $src                Script loader source path.
     180                 */
     181                $attributes = apply_filters( 'script_loader_attributes', $default_attributes, $handle, $src );
     182
     183                $concat_attributes = '';
     184                foreach ( $attributes as $attribute => $attribute_value ) {
     185                        if ( ! is_null( $attribute ) && ! is_null( $attribute_value ) ) {
     186                                $concat_attributes .= ' '. esc_attr( $attribute ) .'="'. esc_attr( $attribute_value ) .'"';
     187                        }
     188                }
     189
     190                return $concat_attributes;
     191        }
     192
     193        /**
    150194         * Localizes a script
    151195         *
    152196         * Localizes only if the script has already been added