Ticket #6108: widget-titles-ob.diff
| File widget-titles-ob.diff, 8.2 KB (added by mdawaffe, 5 years ago) |
|---|
-
wp-admin/includes/widgets.php
47 47 continue; 48 48 49 49 ob_start(); 50 wp_widget_control( 'no-key', $widget['id'], 'template' ); 50 $args = wp_list_widget_controls_dynamic_sidebar( array( 0 => array( 'widget_id' => $widget['id'], 'widget_name' => $widget['name'], '_display' => 'template' ) ) ); 51 call_user_func_array( 'wp_widget_control', $args ); 51 52 $widget_control_template = ob_get_contents(); 52 53 ob_end_clean(); 53 54 … … 122 123 <?php 123 124 } 124 125 125 function wp_list_widget_controls( $widgets, $edit_widget = -1 ) {126 ?>127 126 128 <ul class="widget-control-list"> 129 <li /> 130 <?php 131 foreach ( $widgets as $key => $widget ) 132 wp_widget_control( $key, $widget, $key == $edit_widget ? 'edit' : 'display' ); 127 128 function wp_list_widget_controls( $sidebar ) { 129 add_filter( 'dynamic_sidebar_params', 'wp_list_widget_controls_dynamic_sidebar' ); 133 130 ?> 134 131 135 </ul>132 <ul class="widget-control-list"> 136 133 134 <?php if ( !dynamic_sidebar( $sidebar ) ) echo "<li />"; ?> 135 136 </ul> 137 137 138 <?php 138 139 } 139 140 140 141 142 function wp_list_widget_controls_dynamic_sidebar( $params ) { 143 global $wp_registered_widgets; 144 static $i = 0; 145 $i++; 146 147 $widget_id = $params[0]['widget_id']; 148 149 $params[0]['before_widget'] = "<li id='widget-list-control-item-$i-$widget_id' class='widget-list-control-item widget-sortable'>\n"; 150 $params[0]['after_widget'] = "</li>"; 151 $params[0]['before_title'] = "%BEG_OF_TITLE%"; 152 $params[0]['after_title'] = "%END_OF_TITLE%"; 153 $wp_registered_widgets[$widget_id]['_callback'] = $wp_registered_widgets[$widget_id]['callback']; 154 $wp_registered_widgets[$widget_id]['callback'] = 'wp_widget_control'; 155 return $params; 156 } 157 141 158 /* 142 * Displays the control form for widget of type $widget at position $key. 143 * $display 144 * == 'display': Normal, "closed" form. 145 * == 'edit': "open" form 146 * == 'template': generates a form template to be used by JS 159 * Meta widget used to display the control form for a widget. Called from dynamic_sidebar() 147 160 */ 148 function wp_widget_control( $key, $widget, $display = 'display' ) { 149 static $i = 0; 150 global $wp_registered_widgets, $wp_registered_widget_controls; 151 $control = $wp_registered_widget_controls[$widget]; 152 $widget = $wp_registered_widgets[$widget]; 161 function wp_widget_control( $sidebar_args ) { 162 global $wp_registered_widgets, $wp_registered_widget_controls, $sidebars_widgets, $edit_widget; 163 $widget_id = $sidebar_args['widget_id']; 164 $sidebar_id = isset($sidebar_args['id']) ? $sidebar_args['id'] : false; 153 165 166 $control = $wp_registered_widget_controls[$widget_id]; 167 $widget = $wp_registered_widgets[$widget_id]; 168 169 $key = $sidebar_id ? array_search( $widget_id, $sidebars_widgets[$sidebar_id] ) : 'no-key'; // position of widget in sidebar 170 171 $edit = $edit_widget > 0 && $key && $edit_widget == $key; // (bool) are we currently editing this widget 172 154 173 $id_format = $widget['id']; 155 if ( 'template' == $display && isset($control['params'][0]['number']) ) { 174 // We aren't showing a widget control, we're outputing a template for a mult-widget control 175 if ( 'template' == $sidebar_args['_display'] && isset($control['params'][0]['number']) ) { 156 176 // number == -1 implies a template where id numbers are replaced by a generic '%i%' 157 177 $control['params'][0]['number'] = -1; 158 178 // if given, id_base means widget id's should be constructed like {$id_base}-{$id_number} 159 179 if ( isset($control['id_base']) ) 160 180 $id_format = $control['id_base'] . '-%i%'; 161 181 } 162 ?>163 182 164 <li id="widget-list-control-item-<?php echo ++$i; ?>-<?php echo $widget['id']; ?>" class="widget-list-control-item widget-sortable"> 165 <h4 class="widget-title"> 183 $widget_title = ''; 184 // We grab the normal widget output to find the widget's title 185 if ( is_callable( $widget['_callback'] ) ) { 186 ob_start(); 187 $args = func_get_args(); 188 call_user_func_array( $widget['_callback'], $args ); 189 $widget_title = ob_get_clean(); 190 $widget_title = wp_widget_control_ob_filter( $widget_title ); 191 } 192 $wp_registered_widgets[$widget_id]['callback'] = $wp_registered_widgets[$widget_id]['_callback']; 193 unset($wp_registered_widgets[$widget_id]['_callback']); 166 194 167 <?php echo $widget['name']; // TODO: Up/Down links for noJS reordering? ?> 195 if ( $widget_title ) 196 $widget_title = sprintf( _c('%1$s: %2$s|widget_admin_title' ), $sidebar_args['widget_name'], $widget_title ); 197 else 198 $widget_title = wp_specialchars( strip_tags( $sidebar_args['widget_name'] ) ); 168 199 169 <?php if ( 'edit' == $display ) : ?>170 200 171 <a class="widget-action widget-control-edit" href="<?php echo remove_query_arg( array( 'edit', 'key' ) ); ?>"><?php _e('Cancel'); ?></a> 201 echo $sidebar_args['before_widget']; 202 ?> 203 <h4 class="widget-title"><?php echo $widget_title ?> 172 204 173 <?php else: ?>205 <?php if ( $edit ) : ?> 174 206 175 <a class="widget-action widget-control-edit" href="<?php echo clean_url( add_query_arg( array( 'edit' => $id_format, 'key' => $key ) ) ); ?>"><?php _e('Edit'); ?></a>207 <a class="widget-action widget-control-edit" href="<?php echo remove_query_arg( array( 'edit', 'key' ) ); ?>"><?php _e('Cancel'); ?></a> 176 208 177 <?php endif;?>209 <?php else : ?> 178 210 179 < /h4>211 <a class="widget-action widget-control-edit" href="<?php echo clean_url( add_query_arg( array( 'edit' => $id_format, 'key' => $key ) ) ); ?>"><?php _e('Edit'); ?></a> 180 212 181 < div class="widget-control"<?php if ( 'edit' == $display ) echo ' style="display: block;"'; ?>>213 <?php endif; ?> 182 214 183 <?php 184 if ( $control ) 185 call_user_func_array( $control['callback'], $control['params'] ); 186 else 187 echo '<p>' . __('There are no options for this widget.') . '</p>'; 188 ?> 215 </h4> 189 216 190 <input type="hidden" name="widget-id[]" value="<?php echo $id_format; ?>" /> 191 <input type="hidden" class="widget-width" value="<?php echo $control['width']; ?>" /> 217 <div class="widget-control"<?php if ( $edit ) echo ' style="display: block;"'; ?>> 192 218 193 <div class="widget-control-actions"> 219 <?php 220 if ( $control ) 221 call_user_func_array( $control['callback'], $control['params'] ); 222 else 223 echo '<p>' . __('There are no options for this widget.') . '</p>'; 224 ?> 194 225 195 <?php if ( $control && 'edit' != $display ) : ?> 226 <input type="hidden" name="widget-id[]" value="<?php echo $id_format; ?>" /> 227 <input type="hidden" class="widget-width" value="<?php echo $control['width']; ?>" /> 196 228 197 <a class="widget-action widget-control-save edit alignleft" href="#save:<?php echo $id_format; ?>"><?php _e('Change'); ?></a>229 <div class="widget-control-actions"> 198 230 199 <?php endif;?>231 <?php if ( $control ) : ?> 200 232 201 <a class="widget-action widget-control-remove delete alignright" href="<?php echo clean_url( add_query_arg( array( 'remove' => $id_format, 'key' => $key ), wp_nonce_url( null, "remove-widget_$widget[id]" ) ) ); ?>"><?php _e('Remove'); ?></a> 202 <br class="clear" /> 203 </div> 233 <a class="widget-action widget-control-save wp-no-js-hidden edit alignleft" href="#save:<?php echo $id_format; ?>"><?php _e('Change'); ?></a> 234 235 <?php endif; ?> 236 237 <a class="widget-action widget-control-remove delete alignright" href="<?php echo clean_url( add_query_arg( array( 'remove' => $id_format, 'key' => $key ), wp_nonce_url( null, "remove-widget_$widget[id]" ) ) ); ?>"><?php _e('Remove'); ?></a> 238 <br class="clear" /> 204 239 </div> 205 </li> 206 240 </div> 207 241 <?php 242 echo $sidebar_args['after_widget']; 208 243 } 209 244 245 function wp_widget_control_ob_filter( $string ) { 246 if ( false === $beg = strpos( $string, '%BEG_OF_TITLE%' ) ) 247 return ''; 248 if ( false === $end = strpos( $string, '%END_OF_TITLE%' ) ) 249 return ''; 250 $string = substr( $string, $beg + 14 , $end - $beg - 14); 251 return wp_specialchars( strip_tags( $string ) ); 252 } 253 210 254 function widget_css() { 211 255 wp_admin_css( 'css/widgets' ); 212 256 } -
wp-admin/widgets.php
247 247 248 248 <div id="current-sidebar"> 249 249 250 <?php wp_list_widget_controls( $sidebar s_widgets[$sidebar], $edit_widget); // Show the control forms for each of the widgets in this sidebar ?>250 <?php wp_list_widget_controls( $sidebar ); // Show the control forms for each of the widgets in this sidebar ?> 251 251 252 252 </div> 253 253 </div>
