web-dev-qa-db-ja.com

Before_contentとafter_contentをregister_sidebarに追加します

before_contentafter_contentという2つの新しい関数をregister_sidebar関数に追加する方法はありますか?これらはbefore_titleafter_titleのように動作しますが、タイトルの後に続くすべてのものをラップします。

私は このスレッド にいくつかの有用な情報があるのを見つけましたが、言及されたすべてのアプローチには欠陥があります。

たとえば、after_titleafter_widgetに必要なコードを挿入すると、タイトルが設定されていないとコードが破損する可能性があります。解決策は、最初のdivをbefore_widgetで複製し、それをbefore_titleで再度閉じてからbefore_titleで再度開くことですが、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
JacobTheDev

制限は既存の引数と、ほとんどすべてのウィジェットが通常どの程度コンテンツを出力するかにかかっています。

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で包むでしょう。

4
TheDeadMedic