将Bootstrap面板标记应用于WordPress小部件的问题

时间:2015-10-17 05:51:22

标签: wordpress twitter-bootstrap

学习 WordPress主题开发。我正在主题侧边栏部分添加小部件。我正在使用 Bootstrap面板来显示小部件内容。

我的代码是:

add_action( 'widgets_init', 'mytheme_widgets_init' );
function mytheme_widgets_init() {
    register_sidebar( array(
        'name' => __( 'Main Sidebar', 'mytheme' ),
        'id' => 'sidebar_main',
        'description' => __( 'Sidebar main widget' ),
        'before_widget' => '<div id="%1$s" class="panel panel-primary widget_sidebar_main clearfix %2$s">',
        'after_widget' => '</div></div>',
        'before_title' => '<div class="panel-heading"><h3 class="panel-title">',
        'after_title' => '</h3></div><div class="panel-body">',
    ));
}

使用管理面板在Widget中添加标题和内容时工作正常。

但是当我没有输入标题时,它会创建一个额外的&lt; / div&gt; 。 这种情况是无效的HTML。

如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

您可以使用widget_title过滤器检查标题是否存在,并相应地添加标记:

add_action( 'widgets_init', 'mytheme_widgets_init' );
function mytheme_widgets_init() {
    register_sidebar( array(
        'name' => __( 'Main Sidebar', 'mytheme' ),
        'id' => 'sidebar_main',
        'description' => __( 'Sidebar main widget' ),
        'before_widget' => '<div id="%1$s" class="panel panel-primary widget_sidebar_main clearfix %2$s">',
        'after_widget' => '</div></div>',
        'before_title' => '',
        'after_title' => '',
    ));
}

add_filter( 'widget_title', 'mytheme_widget_title_filter' );
function mytheme_widget_title_filter( $title ) {
    $title = $title ? 
        '<div class="panel-heading"><h3 class="panel-title">'.$title.'</h3></div>' : '';
    $title .= '<div class="panel-body">';
    return $title;
}

<强>更新

如果您只想将以前的过滤器功能应用于主侧边栏,请在显示侧边栏之前添加它,然后立即将其删除:

<?php
    add_filter( 'widget_title', 'mytheme_widget_title_filter');
    dynamic_sidebar( 'sidebar_main' );
    remove_filter( 'widget_title', 'mytheme_widget_title_filter');
?>