mirror of
git://develop.git.wordpress.org/
synced 2025-04-09 14:42:05 +02:00
Widgets: Use isset()
in WP_Widget:: display_callback()
to support ArrayIterator
and ArrayObject
.
[33696] introduced support returning `ArrayIterator` and `ArrayObject` objects from `WP_Widget::get_settings()`. Per the PHP manual, `array_key_exists()` stopped supporting this in PHP 8.0.0 and deprecated in PHP 7.4.0. >For backward compatibility reasons, array_key_exists() will also return true if key is a property defined within an object given as array. This behaviour is deprecated as of PHP 7.4.0, and removed as of PHP 8.0.0. This commit uses `isset()` instead of `array_key_exists()` which is supported on all current versions of PHP. Includes unit tests. Ref: * https://www.php.net/manual/en/function.array-key-exists.php#refsect1-function.array-key-exists-notes Follow-up to [32602], [33696]. Props dlh, hellofromTonya, jrf, sergeybiryukov. Fixes #52728. git-svn-id: https://develop.svn.wordpress.org/trunk@52173 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
6ec3f649b7
commit
13b52a310f
@ -365,7 +365,7 @@ class WP_Widget {
|
||||
$this->_set( $widget_args['number'] );
|
||||
$instances = $this->get_settings();
|
||||
|
||||
if ( array_key_exists( $this->number, $instances ) ) {
|
||||
if ( isset( $instances[ $this->number ] ) ) {
|
||||
$instance = $instances[ $this->number ];
|
||||
|
||||
/**
|
||||
|
@ -590,6 +590,47 @@ class Tests_Widgets extends WP_UnitTestCase {
|
||||
|
||||
// @todo Test WP_Widget::display_callback().
|
||||
|
||||
/**
|
||||
* @ticket 52728
|
||||
*/
|
||||
function test_widget_display_callback_handles_arrayobject() {
|
||||
$widget = new WP_Widget_Text();
|
||||
|
||||
register_widget( $widget );
|
||||
|
||||
add_filter(
|
||||
"pre_option_{$widget->option_name}",
|
||||
static function() {
|
||||
return new ArrayObject(
|
||||
array(
|
||||
2 => array( 'title' => 'Test Title' ),
|
||||
'_multiwidget' => 1,
|
||||
'__i__' => true,
|
||||
)
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
// Effectively ignore the output until retrieving it later via `getActualOutput()`.
|
||||
$this->expectOutputRegex( '`.`' );
|
||||
|
||||
$widget->display_callback(
|
||||
array(
|
||||
'before_widget' => '<section>',
|
||||
'after_widget' => "</section>\n",
|
||||
'before_title' => '<h2>',
|
||||
'after_title' => "</h2>\n",
|
||||
),
|
||||
2
|
||||
);
|
||||
|
||||
$actual = $this->getActualOutput();
|
||||
|
||||
unregister_widget( $widget );
|
||||
|
||||
$this->assertStringContainsString( 'Test Title', $actual );
|
||||
}
|
||||
|
||||
/**
|
||||
* @see WP_Widget::is_preview()
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user