将BEFORE_CONTENT和After_CONTENT添加到注册侧栏

时间:2015-04-24 作者:JacobTheDev

有没有办法添加两个新功能,before_contentafter_contentregister_sidebar 作用这些会像before_titleafter_title, 除了它会包装标题后面的所有内容。

我找到了this thread 它有一些有用的信息,但每一个提到的方法都有缺陷。

例如,在中插入所需的代码after_titleafter_widget 如果未设置标题,可能会导致代码中断。解决方案是复制期初div-inbefore_widget 然后在before_title 然后在中重新打开before_title, 但如果设置了标题,则会创建一个空div。

理想情况下,我想这样做:

register_sidebar(array(
    "id"             => "sidebar",
    "name"           => "Sidebar",
    "before_widget"  => "<div class=\'box box_push\'>",
    "before_title"   => "<div class=\'box-hd\'>",
    "after_title"    => "</div>",
    "before_content" => "<div class=\'box box-bd\'>"
    "after_content"  => "</div>";
    "after_widget"   => "</div>",
));
输出为:

<div class="box box_push">
    <div class="box-hd">
        <!-- widget title -->
    </div>

    <div class="box box-bd">
        <!-- widget content-->
    </div>
</div>

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

限制取决于现有参数以及几乎所有小部件通常输出内容的方式:

echo $args[\'before_widget\'];
if ( $title ) {
    echo $args[\'before_title\'] . $title . $args[\'after_title\'];
}

// Widget content

echo $args[\'after_widget\'];
一些小部件可能提供内容挂钩之前/之后,但如果您想要一个“全局”修复,那么没有可靠的方法。

我能看到的唯一解决方案是添加两次包装并使用CSS:empty 要隐藏剩菜,请执行以下操作:

register_sidebar(
    array(
        \'before_widget\'  => \'<div class="box box_push"><div class="box box-bd">\',
        \'before_title\'   => \'</div>\', // If we have a title, close the wrap above
        \'after_title\'    => \'<div class="box box-bd">\', // Now open another one
        \'after_widget\'   => \'</div></div>\',
    )
);
因此,对于具有标题的小部件,您将最终得到:

<div class="box box_push">
    <div class="box box-bd"></div>
    Widget Title

    <div class="box box-bd">
        Widget content
    </div>
</div>
输入上述CSS:

.box-bd:empty {
    display: none;
}
这将隐藏第一个冗余包裹。有点脏,我知道,但这意味着不管有没有标题,你都会把你的内容包装在.box-bd.

结束

相关推荐

如何将新的CSS文件添加到新的PHP文件中

我为Wordpress创建了一个新的模板文件,通过PHP构建页面的元素,Wordpress可以识别出这样的模板。然后,我想为上述模板(同一文件夹)包含一个CSS文件,并使用标准:<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"> 但由于某些原因,PHP文件不会加载链接的CSS设置。如果我添加<? include(\'style.css\') ?> 它的内容被打印到页面上,这意味着php文件