修正 Wordpress 2.2 Widget 的 bug 07月 29th, 2007

尽管Wordpress 2.2的Widget和Automattic的Sidebar Widget插件兼容,但是却存在一个不大不小的bug:

在调用register_sidebar注册超过一个Sidebar的时候,如果同时指定了Sidebar的名称,那么最终只能注册成功一个

Sidebar,例如按照Automattic的API应该可以使用register_sidebar (2, array (‘name’ => ‘aaa %d’))注册依次为aaa 1,aaa 2的sidebar,而在wordpress中的结果则是只有一个名为aaa的sidebar,看看代码(WORDPRESS DIR/wp-include/widgets.php)


function register_sidebars($number

= 1, $args = array()) {

$number = (int) $number;

if ( is_string($args) )

parse_str($args, $args);

$i = 1;

while ( $i < = $number ) {

$_args = $args;

if ( $number > 1 ) {

$_args['name'] = isset($args['name']) ? $args['name'] : sprintf(__(Sidebar %d), $i);

} else {

$_args['name'] = isset($args['name']) ? $args['name'] : __(Sidebar);

}

$_args['id'] = isset($args['id']) ? $args['id'] : "sidebar-$i";

register_sidebar($_args);

++$i;

}

}

嗯。。。相信已经有同学看出来了,在注册多于一个sidebar时,sidebar的名字是

 

isset($args[’name’]) ? $args[’name’] : sprintf(__(’Sidebar %d’), $i);

就是说如果指定了名字则已指定的名字为准,没有指定名称时才会按数字递增,那么修改就很容易了(其实照抄Automattic Sidebar Widget的就可以了,嘿嘿)

 


function register_sidebars($number = 1, $args = array()) {

$number = (int) $number;

if ( is_string($args) )

parse_str($args, $args);

$name = $args['name'] ? $args['name'] : __(Sidebar);

$i = 1;

while ( $i < = $number ) {

if ( isset($args['name']) && $number > 1 ) {

if ( !strstr($name, ‘%d) )

$name = "$name %d";

$args['name'] = sprintf($name, $i);

}

register_sidebar($args);

++$i;

}

}

ok,收工

 

Tags: ,
Posted in 学习札记 |

One Response to “修正 Wordpress 2.2 Widget 的 bug”

  1.   修正 Wordpress 2.2 Widget 的 bug by BloggingPro China On

    [...]   修正 Wordpress 2.2 Widget 的 bug,wp2.2自带的widget存在着一个不大不小的bug: 在调用register_sidebar注册超过一个Sidebar的时候,如果同时指定了Sidebar的名称,那么最终只能注册成功一个 [...]

Leave a Reply

Categories