Make WordPress Core

Opened 5 years ago

Closed 5 years ago

Last modified 3 years ago

#46981 closed defect (bug) (fixed)

Bundled themes should pass version to wp_enqueue_script() to ensure proper cache busting

Reported by: dswebsme's profile dswebsme Owned by: dswebsme's profile dswebsme
Milestone: 5.3 Priority: normal
Severity: normal Version:
Component: Bundled Theme Keywords: has-patch needs-testing
Focuses: Cc:

Description (last modified by dswebsme)

Bundled themes should pass the current theme version ($ver parameter) to wp_enqueue_script() to ensure theme stylesheets properly bypass cache after being updated.

Original DEV discussion (related to stylesheets) took place here: #39997

In this discussion script enqueues were mentioned briefly but could definitely benefit from cache busting as well.

This affects all bundled themes.

Attachments (2)

46981.diff (1.5 KB) - added by justinahinon 5 years ago.
46981.1.diff (19.6 KB) - added by ianbelanger 5 years ago.
Updates all theme script enqueues with most recent modified date as version

Download all attachments as: .zip

Change History (15)

#1 @dswebsme
5 years ago

  • Description modified (diff)
  • Owner set to dswebsme
  • Status changed from new to assigned

#2 @dswebsme
5 years ago

  • Description modified (diff)

#3 @justinahinon
5 years ago

  • Component changed from Themes to Bundled Theme

@dswebsme do you mean the wp_enqueue_style function? Used to load the theme main stylesheet (style.css).

I'll submit a patch tomorrow.

#4 @justinahinon
5 years ago

Patches for twenty seventeen and twenty sixteen

5 years ago

#5 @dswebsme
5 years ago

@justinahinon Thanks for your question and quick work on the patch. To clarify, this ticket is specifically referring to wp_enqueue_script() in all bundled themes EXCEPT twentynineteen which already uses the preferred wp_get_theme()->get( 'Version' ) method.

All wp_enqueue_style() calls in pre-twentynineteen bundled themes have been addressed in #46979 which is currently awaiting testing and review (we could definitely use your help there!)

Finally, as a note related to static version parameters vs. wp_get_theme()->get( 'Version' ) the DEV team decided that bundled themes prior to twentynineteen should use static version numbers for maximum backwards compatibility with older versions of WordPress ( ref: ).

There is still some legwork to do on this issue which includes auditing the last modified dates of all pre-twentynineteen bundled theme script assets, similar to what @desrosj and I did for #46979.

Thanks for helping out!

#6 @justinahinon
5 years ago

Oh ok. Got it. Thanks.
It's weird, but when I look into a twenty nineteen functions.php, I can't find where

wp_get_theme()->get( 'Version' )

is used for wp_enqueue_script.

Here's what I have on my side

 * Enqueue scripts and styles.
function twentynineteen_scripts() {
	wp_enqueue_style( 'twentynineteen-style', get_stylesheet_uri(), array(), wp_get_theme()->get( 'Version' ) );

	wp_style_add_data( 'twentynineteen-style', 'rtl', 'replace' );

	if ( has_nav_menu( 'menu-1' ) ) {
		wp_enqueue_script( 'twentynineteen-priority-menu', get_theme_file_uri( '/js/priority-menu.js' ), array(), '1.1', true );
		wp_enqueue_script( 'twentynineteen-touch-navigation', get_theme_file_uri( '/js/touch-keyboard-navigation.js' ), array(), '1.1', true );

	wp_enqueue_style( 'twentynineteen-print-style', get_template_directory_uri() . '/print.css', array(), wp_get_theme()->get( 'Version' ), 'print' );

	if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
		wp_enqueue_script( 'comment-reply' );
add_action( 'wp_enqueue_scripts', 'twentynineteen_scripts' );

#7 @dswebsme
5 years ago

@justinahinon Ah, nice catch. In previous conversations regarding wp_enqueue_style() it was mentioned several times that "twentynineteen already uses wp_get_theme()->get( 'Version' )." I took that to mean that all enqueues use the dynamic version method but it looks like I was mistaken.

That being the case, I'll modify the description above to reflect your findings. I'll reach out to some of the folks who provided feedback on the previous discussions to get recommendations on whether twentynineteen should call scripts using the dynamic version method or date string (e.g. 20181231) like other twenty* themes.

#8 @dswebsme
5 years ago

  • Description modified (diff)

#9 @ianbelanger
5 years ago

  • Milestone changed from 5.2.1 to 5.3
  • Version 5.1.1 deleted

Changing milestone as Bundled Themes are only updated during major releases. Also removed version 5.1.1 as this was not introduced in that version.

#10 @ianbelanger
5 years ago

I audited the script last edit dates and the version specified in the wp_enqueue_script() call. Let's make sure the dates are correct (and actually present) for each script. Results (dates in YYYY-MM-DD):

Last Modified Current Specified Version
Twenty Eleven
/js/html5.js 2014-02-25 none Third-party script which has it's own version # 3.7.0
/js/showcase.js 2011-04-29 2011-04-28
/js/theme-customizer.js 2015-04-01 20150401
/js/theme-options.js 2011-06-10 2011-06-10
Twenty Twelve
/js/html5.js 2014-02-25 none Third-party script which has it's own version # 3.7.0
/js/navigation.js 2014-12-05 20140711
/js/theme-customizer.js 2014-11-20 20141120
Twenty Thirteen
/js/html5.js 2014-02-25 none Third-party script which has it's own version # 3.7.0
/js/functions.js 2017-12-18 20160717
/js/theme-customizer.js 2014-11-20 20141120
Twenty Fourteen
/js/html5.js 2014-02-25 none Third-party script which has it's own version # 3.7.0
/js/customizer.js 2014-10-15 20131205
/js/featured-content-admin.js 2013-12-05 20131022
/js/functions.js 2017-12-18 20150315
/js/keyboard-image-navigation.js 2015-01-20 20130402
/js/slider.js 2015-01-20 20131205
Twenty Fifteen
/js/html5.js 2014-10-28 none Third-party script which has it's own version # 3.7.0
/js/color-scheme-control.js 2014-12-16 20141216
/js/customize-preview.js 2014-12-16 20141216
/js/functions.js 2017-12-18 20150330
/js/keyboard-image-navigation.js 2014-12-10 20141010
/js/skip-link-focus-fix.js 2014-10-28 20141010
Twenty Sixteen
/js/html5.js 2017-05-30 3.7.3 Third-party script which has it's own version #
/js/color-scheme-control.js 2017-05-30 20160816
/js/customize-preview.js 2017-05-30 20160816
/js/functions.js 2018-12-17 20181230
/js/keyboard-image-navigation.js 2017-05-30 20160816
/js/skip-link-focus-fix.js 2017-05-30 20160816
Twenty Seventeen
/assets/js/html5.js 2016-10-20 3.7.3 Third-party script which has it's own version #
/assets/js/customize-controls.js 2016-12-20 1.0
/assets/js/customize-preview.js 2016-12-02 1.0
/assets/js/global.js 2019-01-21 1.0
/assets/js/jquery.scrollTo.js 2016-10-20 2.1.2 Third-party script which has it's own version #
/assets/js/navigation.js 2016-12-03 1.0
/assets/js/skip-link-focus-fix.js 2016-11-14 1.0
Twenty Nineteen
/js/customize-controls.js 2018-12-14 20181231
/js/customize-preview.js 2018-12-14 20181231
/js/priority-menu.js 2018-12-14 1.1
/js/touch-keyboard-navigation.js 2018-12-31 1.1

Note: Twenty Ten does not contain any scripts

Last edited 5 years ago by ianbelanger (previous) (diff)

5 years ago

Updates all theme script enqueues with most recent modified date as version

#11 @ianbelanger
5 years ago

  • Keywords has-patch needs-testing added; needs-patch removed
  • Severity changed from minor to normal

#12 @SergeyBiryukov
5 years ago

  • Resolution set to fixed
  • Status changed from assigned to closed

In 45768:

Bundled Themes: Audit and update version numbers passed to wp_enqueue_script() to ensure proper cache busting.

Props dswebsme, ianbelanger, justinahinon.
Fixes #46981.

This ticket was mentioned in Slack in #core-themes by sergey. View the logs.

3 years ago

Note: See TracTickets for help on using tickets.