Widgets: Allow for short-circuiting widget output in the_widget() using the widget_display_callback filter, for consistency with output via a registered sidebar.

Props MarcGuay, donmhico.
Fixes #34226.

git-svn-id: https://develop.svn.wordpress.org/trunk@45798 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov 2019-08-14 23:02:25 +00:00
parent 1177e1212f
commit a2a28e4608
2 changed files with 23 additions and 0 deletions

View File

@ -1125,6 +1125,13 @@ function the_widget( $widget, $instance = array(), $args = array() ) {
$instance = wp_parse_args( $instance );
/** This filter is documented in wp-includes/class-wp-widget.php */
$instance = apply_filters( 'widget_display_callback', $instance, $widget_obj, $args );
if ( false === $instance ) {
return;
}
/**
* Fires before rendering the requested widget.
*

View File

@ -712,6 +712,22 @@ class Tests_Widgets extends WP_UnitTestCase {
the_widget( 'Widget_Class' );
}
/**
* @ticket 34226
*/
public function test_the_widget_should_short_circuit_with_widget_display_callback() {
add_filter( 'widget_display_callback', '__return_false' );
register_widget( 'WP_Widget_Text' );
ob_start();
the_widget( 'WP_Widget_Text' );
$widget_content = ob_get_clean();
unregister_widget( 'WP_Widget_Text' );
$this->assertEmpty( $widget_content );
}
/**
* Register nav menu sidebars.
*