[wp-trac] [WordPress Trac] #8756: No continuity constraint between dynamic_sidebar and register_sidebar leeds to no widgets in the sidebar in admin mode

WordPress Trac wp-trac at lists.automattic.com
Tue Dec 30 08:52:41 GMT 2008


#8756: No continuity constraint between dynamic_sidebar and register_sidebar leeds
to no widgets in the sidebar in admin mode
-----------------------------+----------------------------------------------
 Reporter:  e-gaulue         |       Owner:  anonymous     
     Type:  defect (bug)     |      Status:  new           
 Priority:  highest omg bbq  |   Milestone:  2.8           
Component:  General          |     Version:  2.7           
 Severity:  trivial          |    Keywords:  widget sidebar
-----------------------------+----------------------------------------------
 register_sidebar allows you to set sidebars with different id and name.

 In order to have your widget display you go in dynamic_sidebar function.

 This function accepts a number or whatever. If you set it to the integer
 "2" it looks for the sidebar with the "sidebar-2" index. If you set it to
 something else it applies sanitize_title on the parameter and it tries to
 find a corresponding sidebar name then it set te index. If it doesn't find
 it, the index will stay with the sanitize_title value of the parameter and
 it goes on.

 In the admin interface we will come here because of this code (in wp-
 admin/widgets.php):
 {{{
 <div id="current-sidebar">
         <?php wp_list_widget_controls( $sidebar ); // Show the control
 forms for each of the widgets in this sidebar ?>
 </div>
 }}}

 With $sidebar being :
 {{{
 if ( isset($_GET['sidebar']) &&
 isset($wp_registered_sidebars[$_GET['sidebar']]) ) {
         $sidebar = attribute_escape( $_GET['sidebar'] );
 (...)
 }}}

 So it's the sidebar!['id'], but at no time it has been sinitize with
 sanitize_title(). So the function dynamic_sidebar don't find the sidebar.
 Having an uppercase sidebar!['id'] is enough to fall in that trap.

 I propose several possibilities :
  * sanitize sidebar!['id'] with sanitize_title at sidebar registration
 time
  * modify the dynamic_sidebar function by keeping the original value of
 index during sidebar!['name'] search
  * modify the dynamic_sidebar function by escaping the sidebar!['name']
 search if isset($wp_registered_sidebars[$index])
  * modify the dynamic_sidebar function by changing the test in the
 sidebar!['name'] search to :
  {{{if ( sanitize_title($value['name']) == $index ||
 sanitize_title($value['index'])== $index )}}}

-- 
Ticket URL: <http://trac.wordpress.org/ticket/8756>
WordPress Trac <http://trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list