[wp-trac] [WordPress Trac] #54958: Inconsistent behaviour for wp_add_inline_script between block-based and standard themes
WordPress Trac
noreply at wordpress.org
Thu Jul 21 13:12:35 UTC 2022
#54958: Inconsistent behaviour for wp_add_inline_script between block-based and
standard themes
---------------------------+------------------------------
Reporter: Rustaurius | Owner: (none)
Type: defect (bug) | Status: reopened
Priority: normal | Milestone: Awaiting Review
Component: Script Loader | Version:
Severity: normal | Resolution:
Keywords: | Focuses:
---------------------------+------------------------------
Comment (by luigipulcini):
We extensively analyzed the situation and it appears that block themes (or
at least Twenty Twenty-Two) fire the `wp_enqueue_scripts` action only
**after** the `the_post` action and, in turn, after `the_content`.
So, while plugins registering a script during `wp_enqueue_scripts` will
find it already registered when any shortcode callback is executed in
regular themes, the same is not true for block themes. For them, a
shortcode callback will be executed before `wp_enqueue_scripts`, thus
before a plugin had a chance to register the script.
In general, using `wp_localize_script` and `wp_add_inline_script` should
always be done at the same time with the registration. Therefore, if you
are registering the script inside `wp_enqueue_scripts` and, at the same
time, adding the inline script you need, then you are free to enqueue the
script during the shortcode callback by using `wp_enqueue_script` with the
handle only. In fact, WordPress has a mechanism to automatically re-
enqueue a script that was prematurely enqueued before the registration
whenever the script gets finally registered. So, from that point of view,
the change in block themes doesn't create any harm. But
`wp_localize_script` and `wp_add_inline_script` **''must''** always be
executed after the script is registered.
In those situations where a block theme is used and the javascript
parameters are based on values calculated inside the shortcode callback,
there is no solution other than **''registering''** (not just
**''enqueuing''**) the script and add the inline script **''inside''** the
shortcode callback itself, even if that happens before
`wp_enqueue_scripts`. Since WordPress cannot really register a script
twice, this second approach is perfectly viable and effective.
--
Ticket URL: <https://core.trac.wordpress.org/ticket/54958#comment:8>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list