Make WordPress Core

Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#12606 closed defect (bug) (fixed)

register_sidebars(n) fails to register multiple sidebars when 'id' argument defined

Reported by: minusfive Owned by: azaozz
Milestone: 3.0 Priority: normal
Severity: major Version: 2.9.2
Component: Widgets Keywords: widgets, register_sidebars
Focuses: Cc:


When using default args for 'register_sidebars()' as defined on Codex:

$args = array(
    'name'          => 'My Custom Sidebar %d',
    'id'            => 'my-custom-sidebar-$i',
    'before_widget' => '<li id=\"%1$s\" class=\"widget %2$s\">',
    'after_widget'  => '</li>',
    'before_title'  => '<h2 class=\"widgettitle\">',
    'after_title'   => '</h2>' );

'id' argument won't get the '$i' variable value, thus won't be unique for each sidebar. Because all sidebars will end up using the same id, each iteration will override the previous sidebar. This obviously causes the system to register only 1 sidebar (the last iteration).

If 'id' argument is simply not defined and the function is allowed to use the default all sidebars are created, which is OK unless you insert another sidebar before, in which case all settings are lost. This is because the default 'id' argument for multiple sidebars is dependent on the sidebar's position in the wp_registered_sidebars array.

Proposed solution attached.

Attachments (1)

widgets.php.diff (474 bytes) - added by minusfive 4 years ago.
Proposed solution for Ticket #12606

Download all attachments as: .zip

Change History (7)

minusfive4 years ago

Proposed solution for Ticket #12606

comment:1 dd324 years ago

  • Resolution set to fixed
  • Status changed from new to closed

(In [13698]) Ensure that for multiple sidebar additions, the ID is unique (even if specified). Append -2.. for > 1 sidebars. Props minusfive. Fixes #12606

comment:2 dd324 years ago

(In [13699]) Simplify the Id uniqueness loops. Guard against more use-cases which might cause ID conflicts. See #12606

comment:3 dd324 years ago

(In [13700]) Revert [13699], It breaks dynamic_sidebar(<int>) compatibility. Use a safer loop for clashes. See #12606

comment:4 dd324 years ago

(In [13701]) Restore backwards compatibility of integer sidebars("sidebar-$i"). See #12606

comment:5 nacin4 years ago

  • Milestone 2.9.3 deleted

Milestone 2.9.3 deleted

comment:6 nacin4 years ago

  • Milestone set to 3.0
Note: See TracTickets for help on using tickets.