修正 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的名字是
就是说如果指定了名字则已指定的名字为准,没有指定名称时才会按数字递增,那么修改就很容易了(其实照抄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,收工
One Response to “修正 Wordpress 2.2 Widget 的 bug”
Leave a Reply
Recent Post
Recent Comments
- wayne:@Felix: 嗯...我倒是没什么要求, 就是拿来玩的,
- Felix Huang:@wayne en 始终是一分钱一分货 我对稳定性要求比较高
- wayne:@mattw: sandbox的自带style, 我还没空动
- wayne:@mattw: 反正留着也没用... @dimlau: 下
- Felix Huang:我还是一直用mediatemple的(gs)...... 呵
- dimlau:装的不像,没有我帅
- mattw:没到期你 cancel 个啥,留着做测试、做 tunnel
- westup:看你不断的折腾ING
- dimlau:哈哈,又换WP了
- wayne:@半瓶墨水: 不好意思, 从mt导入数据的时候换行被搞乱了
[...] 修正 Wordpress 2.2 Widget 的 bug,wp2.2自带的widget存在着一个不大不小的bug: 在调用register_sidebar注册超过一个Sidebar的时候,如果同时指定了Sidebar的名称,那么最终只能注册成功一个 [...]