From 2b5f9d64409f617dbf2c484d1696d60e80c63967 Mon Sep 17 00:00:00 2001 From: Ryan Boren Date: Thu, 28 Feb 2008 00:31:46 +0000 Subject: [PATCH] Fix widgets using old-style multi instance support. Props mdawaffe. fixes #6023 git-svn-id: https://develop.svn.wordpress.org/trunk@7080 602fd350-edb4-49c9-b593-d223f7449a82 --- wp-admin/includes/widgets.php | 8 +++++--- wp-includes/widgets.php | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/wp-admin/includes/widgets.php b/wp-admin/includes/widgets.php index 7a9058de57..c9ca05fb28 100644 --- a/wp-admin/includes/widgets.php +++ b/wp-admin/includes/widgets.php @@ -41,7 +41,8 @@ function wp_list_widgets( $show = 'all', $_search = false ) { continue; } - $sidebar = is_active_widget( $widget['callback'] ); + $sidebar = is_active_widget( $widget['callback'], $widget['id'] ); + if ( ( 'unused' == $show && $sidebar ) || ( 'used' == $show && !$sidebar ) ) continue; @@ -50,8 +51,9 @@ function wp_list_widgets( $show = 'all', $_search = false ) { $widget_control_template = ob_get_contents(); ob_end_clean(); - if ( !$sidebar || false !== strpos( $widget_control_template, '%i%' ) ) { - $already_shown[] = $widget['callback']; // it's a multi-widget. We only need to show it in the list once. + if ( !$sidebar || $is_multi = false !== strpos( $widget_control_template, '%i%' ) ) { + if ( $is_multi ) + $already_shown[] = $widget['callback']; // it's a multi-widget. We only need to show it in the list once. $action = 'add'; $add_url = wp_nonce_url( add_query_arg( array( 'sidebar' => $sidebar, diff --git a/wp-includes/widgets.php b/wp-includes/widgets.php index e138a5e6fe..1c29251df0 100644 --- a/wp-includes/widgets.php +++ b/wp-includes/widgets.php @@ -252,7 +252,7 @@ function dynamic_sidebar($index = 1) { /* @return mixed false if widget is not active or id of sidebar in which the widget is active */ -function is_active_widget($callback) { +function is_active_widget($callback, $widget_id = false) { global $wp_registered_widgets; $sidebars_widgets = wp_get_sidebars_widgets(false); @@ -260,7 +260,9 @@ function is_active_widget($callback) { if ( is_array($sidebars_widgets) ) foreach ( $sidebars_widgets as $sidebar => $widgets ) if ( is_array($widgets) ) foreach ( $widgets as $widget ) if ( isset($wp_registered_widgets[$widget]['callback']) && $wp_registered_widgets[$widget]['callback'] == $callback ) - return $sidebar; + if ( !$widget_id || $widget_id == $wp_registered_widgets[$widget]['id'] ) + return $sidebar; + return false; }