Skip to content

Commit 49c3d5b

Browse files
committed
Add missing WP_Script_Modules::set_in_footer() method
1 parent 0c46399 commit 49c3d5b

File tree

2 files changed

+83
-1
lines changed

2 files changed

+83
-1
lines changed

src/wp-includes/class-wp-script-modules.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,23 @@ public function set_fetchpriority( string $id, string $priority ): bool {
221221
return true;
222222
}
223223

224+
/**
225+
* Sets whether a script module should be printed in the footer.
226+
*
227+
* @since 6.9.0
228+
*
229+
* @param non-empty-string $id Script module identifier.
230+
* @param bool $in_footer Whether to print in the footer.
231+
* @return bool Whether setting the printing location was successful.
232+
*/
233+
public function set_in_footer( string $id, bool $in_footer ): bool {
234+
if ( ! isset( $this->registered[ $id ] ) ) {
235+
return false;
236+
}
237+
$this->registered[ $id ]['in_footer'] = $in_footer;
238+
return true;
239+
}
240+
224241
/**
225242
* Marks the script module to be enqueued in the page.
226243
*

tests/phpunit/tests/script-modules/wpScriptModules.php

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,12 +476,23 @@ public function data_test_register_and_enqueue_script_module(): array {
476476
* @covers WP_Script_Modules::print_head_enqueued_script_modules()
477477
* @covers WP_Script_Modules::print_enqueued_script_modules()
478478
* @covers WP_Script_Modules::set_fetchpriority()
479+
* @covers WP_Script_Modules::set_in_footer()
479480
*/
480481
public function test_wp_enqueue_script_module() {
481482
$this->script_modules->register( 'foo', '/foo.js' );
482-
$this->script_modules->register( 'bar', '/bar.js', array(), false, array( 'fetchpriority' => 'high' ) );
483+
$this->script_modules->register(
484+
'bar',
485+
'/bar.js',
486+
array(),
487+
false,
488+
array(
489+
'fetchpriority' => 'high',
490+
'in_footer' => true,
491+
)
492+
);
483493
$this->script_modules->register( 'baz', '/baz.js' );
484494
$this->assertTrue( $this->script_modules->set_fetchpriority( 'baz', 'low' ) );
495+
$this->assertTrue( $this->script_modules->set_in_footer( 'baz', true ) );
485496
$this->script_modules->enqueue( 'foo' );
486497
$this->script_modules->enqueue( 'bar' );
487498
$this->script_modules->enqueue( 'baz' );
@@ -491,10 +502,13 @@ public function test_wp_enqueue_script_module() {
491502
$this->assertCount( 3, $enqueued_script_modules );
492503
$this->assertStringStartsWith( '/foo.js', $enqueued_script_modules['foo']['url'] );
493504
$this->assertSame( 'auto', $enqueued_script_modules['foo']['fetchpriority'] );
505+
$this->assertFalse( $enqueued_script_modules['foo']['in_footer'] );
494506
$this->assertStringStartsWith( '/bar.js', $enqueued_script_modules['bar']['url'] );
495507
$this->assertSame( 'high', $enqueued_script_modules['bar']['fetchpriority'] );
508+
$this->assertTrue( $enqueued_script_modules['bar']['in_footer'] );
496509
$this->assertStringStartsWith( '/baz.js', $enqueued_script_modules['baz']['url'] );
497510
$this->assertSame( 'low', $enqueued_script_modules['baz']['fetchpriority'] );
511+
$this->assertTrue( $enqueued_script_modules['baz']['in_footer'] );
498512
}
499513

500514
/**
@@ -1390,6 +1404,57 @@ public function test_fetchpriority_values( string $fetchpriority ) {
13901404
$this->assertSame( 'auto', $registered_modules['test-script-2']['fetchpriority'] );
13911405
}
13921406

1407+
/**
1408+
* Tests ways of setting in_footer.
1409+
*
1410+
* @ticket 63486
1411+
*
1412+
* @covers ::wp_register_script_module
1413+
* @covers ::wp_enqueue_script_module
1414+
* @covers WP_Script_Modules::set_in_footer
1415+
*/
1416+
public function test_in_footer_methods() {
1417+
wp_register_script_module( 'default', '/default.js', array(), null );
1418+
wp_enqueue_script_module( 'default' );
1419+
1420+
wp_register_script_module( 'in-footer-via-register', '/in-footer-via-register.js', array(), null, array( 'in_footer' => true ) );
1421+
wp_enqueue_script_module( 'in-footer-via-register' );
1422+
1423+
wp_enqueue_script_module( 'in-footer-via-enqueue', '/in-footer-via-enqueue.js', array(), null, array( 'in_footer' => true ) );
1424+
1425+
wp_enqueue_script_module( 'not-in-footer-via-enqueue', '/not-in-footer-via-enqueue.js', array(), null, array( 'in_footer' => false ) );
1426+
1427+
wp_enqueue_script_module( 'in-footer-via-override', '/in-footer-via-override.js' );
1428+
wp_script_modules()->set_in_footer( 'in-footer-via-override', true );
1429+
1430+
wp_enqueue_script_module( 'not-in-footer-via-override', '/not-in-footer-via-override.js', array(), null, array( 'in_footer' => true ) );
1431+
wp_script_modules()->set_in_footer( 'not-in-footer-via-override', false );
1432+
1433+
$actual_head = get_echo( array( wp_script_modules(), 'print_head_enqueued_script_modules' ) );
1434+
$actual_footer = get_echo( array( wp_script_modules(), 'print_enqueued_script_modules' ) );
1435+
1436+
$this->assertEqualHTML(
1437+
$actual_head,
1438+
'
1439+
<script type="module" src="/default.js" id="default-js-module"></script>
1440+
<script type="module" src="/not-in-footer-via-enqueue.js" id="not-in-footer-via-enqueue-js-module"></script>
1441+
<script type="module" src="/not-in-footer-via-override.js" id="not-in-footer-via-override-js-module"></script>
1442+
',
1443+
'<body>',
1444+
"Expected equal script modules in the HEAD. Snapshot:\n$actual_head"
1445+
);
1446+
$this->assertEqualHTML(
1447+
$actual_footer,
1448+
'
1449+
<script type="module" src="/in-footer-via-register.js" id="in-footer-via-register-js-module"></script>
1450+
<script type="module" src="/in-footer-via-enqueue.js" id="in-footer-via-enqueue-js-module"></script>
1451+
<script type="module" src="/in-footer-via-override.js?ver=6.9-alpha-60093-src" id="in-footer-via-override-js-module"></script>
1452+
',
1453+
'<body>',
1454+
"Expected equal script modules in the footer. Snapshot:\n$actual_footer"
1455+
);
1456+
}
1457+
13931458
/**
13941459
* Tests that a script module with an invalid fetchpriority value gets a value of auto.
13951460
*

0 commit comments

Comments
 (0)