Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/js/_enqueues/admin/postbox.js
Original file line number Diff line number Diff line change
Expand Up @@ -657,4 +657,14 @@
pbhide : false
};

/*
* @since 7.0.0
* @see https://core.trac.wordpress.org/ticket/17704
*/
$( function() {
if ( typeof window.pagenow !== 'undefined' && ! postboxes.page && $( '.postbox' ).length ) {
postboxes.add_postbox_toggles( window.pagenow );
}
} );

}(jQuery));
8 changes: 8 additions & 0 deletions src/wp-admin/includes/class-wp-screen.php
Original file line number Diff line number Diff line change
Expand Up @@ -1001,6 +1001,14 @@ public function show_screen_options() {

$show_screen = ! empty( $wp_meta_boxes[ $this->id ] ) || $columns || $this->get_option( 'per_page' );

/*
* @since 7.0.0
* @see https://core.trac.wordpress.org/ticket/17704
*/
if ( ! empty( $wp_meta_boxes[ $this->id ] ) ) {
wp_enqueue_script( 'postbox' );
}

$this->_screen_settings = '';

if ( 'post' === $this->base ) {
Expand Down
41 changes: 41 additions & 0 deletions tests/phpunit/tests/admin/includesScreen.php
Original file line number Diff line number Diff line change
Expand Up @@ -630,4 +630,45 @@ public function test_is_block_editor( $hook, $filter, $expected ) {

$this->assertSame( $expected, $screen->is_block_editor );
}

/**
* @ticket 17704
*/
public function test_show_screen_options_enqueues_postbox_script_when_meta_boxes_exist() {
global $wp_meta_boxes;

set_current_screen( 'tools.php' );
$screen = get_current_screen();

add_meta_box( 'testbox-17704', 'Test Meta Box', '__return_false', $screen );

$screen->show_screen_options();

$this->assertTrue(
wp_script_is( 'postbox', 'enqueued' ),
'The postbox script should be enqueued when meta boxes are registered for the screen.'
);

remove_meta_box( 'testbox-17704', $screen, 'advanced' );
wp_dequeue_script( 'postbox' );
}

/**
* @ticket 17704
*/
public function test_show_screen_options_does_not_enqueue_postbox_script_when_no_meta_boxes() {
global $wp_meta_boxes;

set_current_screen( 'options-general.php' );
$screen = get_current_screen();

unset( $wp_meta_boxes[ $screen->id ] );

$screen->show_screen_options();

$this->assertFalse(
wp_script_is( 'postbox', 'enqueued' ),
'The postbox script should not be enqueued when no meta boxes are registered for the screen.'
);
}
}
Loading