侧边栏小工具中的切换选项

时间:2012-03-13 作者:PrivateUser

我想在侧边栏小部件中使用切换选项。但是我的边栏小部件没有生成唯一id。这是我的寄存器边栏代码。

register_sidebar(array(
        \'name\' => \'Main Sidebar\',
        \'before_widget\' => \'<div class="widget %2$s">\',
        \'after_widget\' => \'</div></div></div>\',
        \'before_title\' => \'<div class="titlediv">\',
        \'after_title\' => \'<a class="dropdown" style="float: right;" href="#%1$s" data-toggle="collapse"><b class="toggleicon"></b></a></div><div id="%1$s" class="collapse in"><div id="%1$s" class="boxdiv">\'
    )
这就是我获得输出的方式

<div class="widget widget_stc-followers">       
<div class="titlediv">Widget Title<a class="dropdown" style="float: right;" href="#%1$s" data-toggle="collapse"><b class="toggleicon"></b></a></div><div id="%1$s" class="collapse in"><div id="%1$s" class="boxdiv">       
Widget content
</div></div></div>
我是说%1$s 未在中工作after_title. 我想使用唯一id。那么有人能给我一些提示让它工作吗?谢谢

2 个回复
最合适的回答,由SO网友:soulseekah 整理而成

这个after_title 不经过任何转换。事实上,只有before_widget 是否:

http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/widgets.php#L876

但是,再低一点你就能看到$params = apply_filters( \'dynamic_sidebar_params\', $params ); 有一个过滤器,你可以钩做自己的过滤。

add_filter( \'dynamic_sidebar_params\', \'wpse_45418_change_after_title\' );
function wpse_45418_change_after_title( $params ) {

    $id = $params[0][\'widget_id\'];

    if ( $id != \'mywidget\' ) return $params;

    global $wp_registered_widgets;
    foreach ( (array) $wp_registered_widgets[$id][\'classname\'] as $cn ) {
        if ( is_string($cn) )
            $classname_ .= \'_\' . $cn;
        elseif ( is_object($cn) )
            $classname_ .= \'_\' . get_class($cn);
    }

    $params[0][\'after_title\'] = sprintf($params[0][\'after_title\'], $id, $classname );

    return $params;
}
这就是为什么没有呈现ID的一般答案。在本例中,要在after_title 键,则需要执行类似的操作,但要提供唯一的ID,如下所示:

add_filter( \'dynamic_sidebar_params\', \'wpse_45418_change_after_title\' );
function wpse_45418_change_after_title( $params ) {

    $id = $params[0][\'widget_id\'];
    if ( $id != \'mywidget\' ) return $params;

    $url = esc_url( \'http://some-url-you-need.com\' );
    $uidcollapse = $id.\'-unique-id\';
    $uidboxdiv = $id.\'-another-unique-id\';

    // <a class="dropdown" style="float: right;" href="%1$s" data-toggle="collapse"><b class="toggleicon"></b></a></div><div id="#%2$s" class="collapse in"><div id="#%3$s" class="boxdiv">

    $params[0][\'after_title\'] = sprintf($params[0][\'after_title\'], $url, $classname, $uidcollapes, $uidboxdiv );

    return $params;
}

SO网友:Bainternet

注意:Id必须是唯一的,并且您正在尝试将相同的Id设置为2个不同的div。

现在id%1$s 和类%2$s 属性仅在before_widget 据我所知,参数,但您可以使用它来切换您的小部件data-toggle="collapse".

结束