Administration: Avoid a PHP 7.4 notice in add_meta_box()
when attempting to re-add a previously removed box.
The logic for skipping previously removed meta boxes with the `core` priority should also apply to the `sorted` priority that is used when the boxes were manually reordered. Add a unit test. Props coolmann, franzarmas, SergeyBiryukov. Fixes #50019. git-svn-id: https://develop.svn.wordpress.org/trunk@47777 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
e6547ba815
commit
efb6e805da
@ -1063,16 +1063,18 @@ function add_meta_box( $id, $title, $callback, $screen = null, $context = 'advan
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If a core box was previously added or removed by a plugin, don't add.
|
// If a core box was previously removed, don't add.
|
||||||
if ( 'core' === $priority ) {
|
if ( ( 'core' === $priority || 'sorted' === $priority )
|
||||||
// If core box previously deleted, don't add.
|
&& false === $wp_meta_boxes[ $page ][ $a_context ][ $a_priority ][ $id ]
|
||||||
if ( false === $wp_meta_boxes[ $page ][ $a_context ][ $a_priority ][ $id ] ) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If a core box was previously added by a plugin, don't add.
|
||||||
|
if ( 'core' === $priority ) {
|
||||||
/*
|
/*
|
||||||
* If box was added with default priority, give it core priority to
|
* If the box was added with default priority, give it core priority
|
||||||
* maintain sort order.
|
* to maintain sort order.
|
||||||
*/
|
*/
|
||||||
if ( 'default' === $a_priority ) {
|
if ( 'default' === $a_priority ) {
|
||||||
$wp_meta_boxes[ $page ][ $a_context ]['core'][ $id ] = $wp_meta_boxes[ $page ][ $a_context ]['default'][ $id ];
|
$wp_meta_boxes[ $page ][ $a_context ]['core'][ $id ] = $wp_meta_boxes[ $page ][ $a_context ]['default'][ $id ];
|
||||||
@ -1080,13 +1082,14 @@ function add_meta_box( $id, $title, $callback, $screen = null, $context = 'advan
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no priority given and ID already present, use existing priority.
|
// If no priority given and ID already present, use existing priority.
|
||||||
if ( empty( $priority ) ) {
|
if ( empty( $priority ) ) {
|
||||||
$priority = $a_priority;
|
$priority = $a_priority;
|
||||||
/*
|
/*
|
||||||
* Else, if we're adding to the sorted priority, we don't know the title
|
* Else, if we're adding to the sorted priority, we don't know the title
|
||||||
* or callback. Grab them from the previously added context/priority.
|
* or callback. Grab them from the previously added context/priority.
|
||||||
*/
|
*/
|
||||||
} elseif ( 'sorted' === $priority ) {
|
} elseif ( 'sorted' === $priority ) {
|
||||||
$title = $wp_meta_boxes[ $page ][ $a_context ][ $a_priority ][ $id ]['title'];
|
$title = $wp_meta_boxes[ $page ][ $a_context ][ $a_priority ][ $id ]['title'];
|
||||||
$callback = $wp_meta_boxes[ $page ][ $a_context ][ $a_priority ][ $id ]['callback'];
|
$callback = $wp_meta_boxes[ $page ][ $a_context ][ $a_priority ][ $id ]['callback'];
|
||||||
|
@ -57,7 +57,7 @@ class Tests_Admin_includesTemplate extends WP_UnitTestCase {
|
|||||||
public function test_remove_meta_box() {
|
public function test_remove_meta_box() {
|
||||||
global $wp_meta_boxes;
|
global $wp_meta_boxes;
|
||||||
|
|
||||||
// Add a meta boxes to remove.
|
// Add a meta box to remove.
|
||||||
add_meta_box( 'testbox1', 'Test Metabox', '__return_false', $current_screen = 'post' );
|
add_meta_box( 'testbox1', 'Test Metabox', '__return_false', $current_screen = 'post' );
|
||||||
|
|
||||||
// Confirm it's there.
|
// Confirm it's there.
|
||||||
@ -108,6 +108,25 @@ class Tests_Admin_includesTemplate extends WP_UnitTestCase {
|
|||||||
$this->assertFalse( $wp_meta_boxes['attachment']['advanced']['default']['testbox1'] );
|
$this->assertFalse( $wp_meta_boxes['attachment']['advanced']['default']['testbox1'] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 50019
|
||||||
|
*/
|
||||||
|
public function test_add_meta_box_with_previously_removed_box_and_sorted_priority() {
|
||||||
|
global $wp_meta_boxes;
|
||||||
|
|
||||||
|
// Add a meta box to remove.
|
||||||
|
add_meta_box( 'testbox1', 'Test Metabox', '__return_false', $current_screen = 'post' );
|
||||||
|
|
||||||
|
// Remove the meta box.
|
||||||
|
remove_meta_box( 'testbox1', $current_screen, 'advanced' );
|
||||||
|
|
||||||
|
// Attempt to re-add the meta box with the 'sorted' priority.
|
||||||
|
add_meta_box( 'testbox1', null, null, $current_screen, 'advanced', 'sorted' );
|
||||||
|
|
||||||
|
// Check that the meta box was not re-added.
|
||||||
|
$this->assertFalse( $wp_meta_boxes[ $current_screen ]['advanced']['default']['testbox1'] );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test calling get_settings_errors() with variations on where it gets errors from.
|
* Test calling get_settings_errors() with variations on where it gets errors from.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user