toscho.design

WordPress: Parallele Widgets

Widgets sind Boxen in WordPress-Themes, die wir im Backend mit beliebigem Inhalt befüllen können. Vorteil: Wir können uns im Theme auf die reine Ausgabelogik konzentrieren es so in mehreren Installationen parallel benutzen.

Wirklich cool finde ich aber mehrere Widgets an derselben Stelle. So möchte ich vielleicht auf der Startseite andere Inhalte in der Sidebar haben als auf den Unterseiten. Oder neben Artikeln sollen bestimmte Hinweise stehen, die neben »statischen« Seiten keinen Sinn ergäben.

Sehen wir uns das erste Beispiel an, den superspeziellen Spezialinhalt für die Startseite.
Dazu registrieren wir zunächst zwei Widgets in der functions.php des Themes:

register_sidebar(
    array(
            'name'            => 'Right Sidebar Home',
            'before_widget'   => '<li id="%1$s" class="widget %2$s">',
            'after_widget'    => '</li>',
            'before_title'    => '<h2 class="widgettitle">',
            'after_title'     => '</h2>',
        )
);
register_sidebar(
    array(
            'name'            => 'Right Sidebar General',
            'before_widget'   => '<li id="%1$s" class="widget %2$s">',
            'after_widget'    => '</li>',
            'before_title'    => '<h2 class="widgettitle">',
            'after_title'     => '</h2>',
        )
);

Widget-Auswahl Diese beiden Widgets sehen wir jetzt im Backend unter »Design/Widgets«.
Mit ein wenig Glück können wir sie dort auch bearbeiten.

Jetzt müssen wir sie im Theme (sidebar.php) einbauen; dazu brauchen wir die internen Conditional Tags. Hier is_front_page().

<ul>
<?php
if ( is_front_page() and !dynamic_sidebar('Right Sidebar Home') )
{
    if( !dynamic_sidebar('Right Sidebar General') )
    {
        wp_list_categories('show_count=0&title_li=<h2>Themen</h2>');
        ?>
        <li>
            <h2>Archiv</h2>
            <ul>
                <?php wp_get_archives('type=monthly'); ?>
            </ul>
        </li>
        <?php
    }
}
elseif ( !is_front_page() and !dynamic_sidebar('Right Sidebar General') )
{
    wp_list_categories('show_count=0&title_li=<h2>Themen</h2>');
    ?>
    <li>
        <h2>Archiv</h2>
        <ul>
            <?php wp_get_archives('type=monthly'); ?>
        </ul>
    </li>
    <?php
}
?>
</ul>

Was passiert jetzt? Erst fragen wir, ob wir gerade die Startseite ausgeben und ob das passende Widget ausgefüllt wurde. Trifft einer der beiden Punkte nicht zu, fragen wir nach dem Inhalt der allgemeinen Sidebar. Wurde auch die noch nicht ausgefüllt, geben wir »feste« Inhalte aus.

Dieses Prinzip können wir auf alle Ausgabetypen (Seiten, Archive, Suchergebnisse) ausdehnen; auch die »Verschachtelungstiefe« darf unbegrenzt tief wachsen. Das mag selten nötig werden; aber die Möglichkeit allein … rockt.

Der Themenutzer kann jetzt flexibler mit seiner Website umgehen, und wir sparen uns den schlimmsten Teil der Designarbeit: Das Justieren winziger, oft unbeständiger Details. Ein Gewinn für alle Seiten.