Script Loader: Disable concatenation for scripts with translations to ensure they are printed in the right order.

Props herregroen, ocean90, desrosj, mikeyarce, bobbingwide, audrasjb, johnbillion.
Fixes #50999.

git-svn-id: https://develop.svn.wordpress.org/trunk@48897 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov 2020-08-27 21:57:01 +00:00
parent 6c395a5f3e
commit a0b40ebd6a

View File

@ -311,6 +311,11 @@ class WP_Scripts extends WP_Dependencies {
$inline_script_tag = ''; $inline_script_tag = '';
} }
$translations = $this->print_translations( $handle, false );
if ( $translations ) {
$translations = sprintf( "<script%s id='%s-js-translations'>\n%s\n</script>\n", $this->type_attr, esc_attr( $handle ), $translations );
}
if ( $this->do_concat ) { if ( $this->do_concat ) {
/** /**
* Filters the script loader source. * Filters the script loader source.
@ -322,7 +327,7 @@ class WP_Scripts extends WP_Dependencies {
*/ */
$srce = apply_filters( 'script_loader_src', $src, $handle ); $srce = apply_filters( 'script_loader_src', $src, $handle );
if ( $this->in_default_dir( $srce ) && ( $before_handle || $after_handle ) ) { if ( $this->in_default_dir( $srce ) && ( $before_handle || $after_handle || $translations ) ) {
$this->do_concat = false; $this->do_concat = false;
// Have to print the so-far concatenated scripts right away to maintain the right order. // Have to print the so-far concatenated scripts right away to maintain the right order.
@ -364,11 +369,6 @@ class WP_Scripts extends WP_Dependencies {
return true; return true;
} }
$translations = $this->print_translations( $handle, false );
if ( $translations ) {
$translations = sprintf( "<script%s id='%s-js-translations'>\n%s\n</script>\n", $this->type_attr, esc_attr( $handle ), $translations );
}
if ( ! preg_match( '|^(https?:)?//|', $src ) && ! ( $this->content_url && 0 === strpos( $src, $this->content_url ) ) ) { if ( ! preg_match( '|^(https?:)?//|', $src ) && ! ( $this->content_url && 0 === strpos( $src, $this->content_url ) ) ) {
$src = $this->base_url . $src; $src = $this->base_url . $src;
} }