Make WordPress Core

Opened 15 years ago

Closed 15 years ago

Last modified 11 years ago

#12606 closed defect (bug) (fixed)

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

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

Description

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 15 years ago.
Proposed solution for Ticket #12606

Download all attachments as: .zip

Change History (8)

@minusfive
15 years ago

Proposed solution for Ticket #12606

#1 @dd32
15 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

#2 @dd32
15 years ago

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

#3 @dd32
15 years ago

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

#4 @dd32
15 years ago

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

#5 @nacin
15 years ago

  • Milestone 2.9.3 deleted

Milestone 2.9.3 deleted

#6 @nacin
15 years ago

  • Milestone set to 3.0

#7 @mcleod@…
11 years ago

  • Keywords changed from widgets, register_sidebars to widgets register_sidebars

The documentation was wrong. The point is, 'id' needs to be just a simple string, like 'sidebar' or 'mybar', not 'sidebar-$i' nor 'sidebar-%d'. The number will be appended automatically to the id, as stated in the textual description below the example cited in this ticket.

Note: See TracTickets for help on using tickets.