[wp-trac] [WordPress Trac] #54529: Allow for `wp_register_script()` to be called after `wp_enqueue_script()`.

WordPress Trac noreply at wordpress.org
Fri Dec 3 01:02:35 UTC 2021

#54529: Allow for `wp_register_script()` to be called after `wp_enqueue_script()`.
 Reporter:  dd32                             |       Owner:  (none)
     Type:  defect (bug)                     |      Status:  new
 Priority:  normal                           |   Milestone:  5.9
Component:  Script Loader                    |     Version:  trunk
 Severity:  normal                           |  Resolution:
 Keywords:  has-patch has-unit-tests commit  |     Focuses:

Comment (by dd32):

 Replying to [comment:6 azaozz]:
 > > This also doesn't deal with certain functions, like
 wp_add_inline_style() that attach data to an existing registered item.
 > Thinking that's okay.

 As do I, it's not perfect, but it's not horrible.

 This is an example of what wouldn't work though:
 add_action( 'wp_enqueue_scripts', function() {
    wp_register_script( 'example', 'https://example.com/example.js' );
 } );

 add_filter( 'the_content', function( $content, $post ) {
    wp_enqueue_script( 'example' );
    wp_localize_script( 'example', 'exampleData', [ 'postID' => $post->ID ]

    return $content;
 }, 10, 2 );

 but like @azaozz said, that doesn't seem like a real-world example,
 usually you'd have something more akin to this, which would still work, or
 you'd not use `register` and just a straight `enqueue + url + localise` at
 the same time.
 add_action( 'wp_enqueue_scripts', function() {
    wp_register_script( 'example', 'https://example.com/example.js' );
    wp_localize_script( 'example', 'exampleData', [ 'url' =>
 'https://example.com/' ] );
 } );

 One thing I'm unsure of - The PR causes the enqueue to happen before the
 script register "in footer" call is made, but I'm not sure if that's
 '''actually''' a problem, as I don't know how the 'group' part is
 handled.. I ''think'' it's okay.
 $registered = $wp_scripts->add( $handle, $src, $deps, $ver ); // it'll be
 enqueued at this point
 if ( $in_footer ) {
         $wp_scripts->add_data( $handle, 'group', 1 ); // This might run
 after the enqueue.

 (note: Can someone else who is more familiar with scripts/styles please
 test and commit, I'm way too rusty on these things)

Ticket URL: <https://core.trac.wordpress.org/ticket/54529#comment:7>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform

More information about the wp-trac mailing list