Ticket #5823: 5823.a.diff
| File 5823.a.diff, 3.9 kB (added by mdawaffe, 8 months ago) |
|---|
-
wp-admin/includes/widgets.php
old new 21 21 $no_widgets_shown = true; 22 22 $already_shown = array(); 23 23 foreach ( $wp_registered_widgets as $name => $widget ) : 24 if ( in_array( $widget['callback'], $already_shown ) ) // We already showed this multi-widget24 if ( 'all' == $show && in_array( $widget['callback'], $already_shown ) ) // We already showed this multi-widget 25 25 continue; 26 26 27 27 if ( $search_terms ) { … … 47 47 continue; 48 48 49 49 ob_start(); 50 $args = wp_list_widget_controls_dynamic_sidebar( array( 0 => array( 'widget_id' => $widget['id'], 'widget_name' => $widget['name'], '_display' => 'template' )) );50 $args = wp_list_widget_controls_dynamic_sidebar( array( 0 => array( 'widget_id' => $widget['id'], 'widget_name' => $widget['name'], '_display' => 'template', '_show' => $show ), 1 => $widget['params'][0] ) ); 51 51 $sidebar_args = call_user_func_array( 'wp_widget_control', $args ); 52 52 $widget_control_template = ob_get_contents(); 53 53 ob_end_clean(); … … 61 61 'key' => false, 62 62 'edit' => false 63 63 ); 64 if ( $is_multi ) {64 if ( 'all' == $show && $is_multi ) { 65 65 // it's a multi-widget. We only need to show it in the list once. 66 66 $already_shown[] = $widget['callback']; 67 67 $num = (int) array_pop( explode( '-', $widget['id'] ) ); … … 92 92 93 93 $no_widgets_shown = false; 94 94 95 96 if ( 'all' != $show && $sidebar_args['_widget_title'] ) 97 $widget_title = $sidebar_args['_widget_title']; 98 else 99 $widget_title = $widget['name']; 95 100 ?> 96 101 97 102 <li id="widget-list-item-<?php echo attribute_escape( $widget['id'] ); ?>" class="widget-list-item"> 98 103 <h4 class="widget-title widget-draggable"> 99 104 100 <?php echo wp_specialchars( $widget['name'] ); ?>105 <?php echo $widget_title; ?> 101 106 102 107 <?php if ( 'add' == $action ) : ?> 103 108 … … 192 197 193 198 $id_format = $widget['id']; 194 199 // We aren't showing a widget control, we're outputing a template for a mult-widget control 195 if ( ' template' == $sidebar_args['_display'] && isset($control['params'][0]['number']) ) {200 if ( 'all' == $sidebar_args['_show'] && 'template' == $sidebar_args['_display'] && isset($control['params'][0]['number']) ) { 196 201 // number == -1 implies a template where id numbers are replaced by a generic '%i%' 197 202 $control['params'][0]['number'] = -1; 198 203 // if given, id_base means widget id's should be constructed like {$id_base}-{$id_number} … … 202 207 203 208 $widget_title = ''; 204 209 // We grab the normal widget output to find the widget's title 205 if ( is_callable( $widget['_callback'] ) ) {210 if ( ( 'all' != $sidebar_args['_show'] || 'template' != $sidebar_args['_display'] ) && is_callable( $widget['_callback'] ) ) { 206 211 ob_start(); 207 212 $args = func_get_args(); 208 213 call_user_func_array( $widget['_callback'], $args ); … … 212 217 $wp_registered_widgets[$widget_id]['callback'] = $wp_registered_widgets[$widget_id]['_callback']; 213 218 unset($wp_registered_widgets[$widget_id]['_callback']); 214 219 215 if ( $widget_title && $widget_title != $ control['name'] )220 if ( $widget_title && $widget_title != $sidebar_args['widget_name'] ) 216 221 $widget_title = sprintf( _c('%1$s: %2$s|1: widget name, 2: widget title' ), $sidebar_args['widget_name'], $widget_title ); 217 222 else 218 223 $widget_title = wp_specialchars( strip_tags( $sidebar_args['widget_name'] ) ); 219 224 225 $sidebar_args['_widget_title'] = $widget_title; 226 220 227 if ( empty($sidebar_args['_display']) || 'template' != $sidebar_args['_display'] ) 221 228 echo $sidebar_args['before_widget']; 222 229 ?> … … 270 277 if ( false === $end = strpos( $string, '%END_OF_TITLE%' ) ) 271 278 return ''; 272 279 $string = substr( $string, $beg + 14 , $end - $beg - 14); 273 return wp_specialchars( strip_tags( $string ) ); 280 $string = str_replace( ' ', ' ', $string ); 281 return trim( wp_specialchars( strip_tags( $string ) ) ); 274 282 } 275 283 276 284 function widget_css() {
