Theme widget-fähig machen: Widget-Bereiche registrieren und anzeigen

Veröffentlicht am

· von Norbert Hofmann

Kurz gesagt: In einem klassischen Theme registrierst du einen Widget-Bereich in der functions.php mit register_sidebar() und gibst ihn im Template mit dynamic_sidebar() aus. Mach das in einem Child-Theme, damit Updates deine Änderungen nicht überschreiben. Block-Themes kennen keine Widget-Bereiche mehr: Dort setzt du Blöcke direkt im Site Editor in Templates oder Template-Teile, zum Beispiel in eine Seitenleiste oder den Footer.

Warum fehlen die Widgets?

Der Menüpunkt Design → Widgets erscheint nur, wenn das aktive Theme mindestens einen Widget-Bereich registriert. Moderne Block-Themes tun das bewusst nicht, weil sie das Layout komplett über Blöcke im Site Editor steuern. Bei klassischen Themes ohne Widgets hat der Entwickler schlicht keine vorgesehen. Was Widgets überhaupt sind, erklärt Was sind Widgets?

Block-Theme: Blöcke statt Widgets

  1. Öffne Design → Editor und wähle das Template, in dem der Inhalt erscheinen soll, etwa „Einzelne Beiträge“.
  2. Füge an der gewünschten Stelle Blöcke ein, zum Beispiel „Neueste Beiträge“, „Suche“ oder „Kategorien“. Für eine Seitenleiste nutzt du den Block „Spalten“.
  3. Soll derselbe Inhalt in mehreren Templates erscheinen, markiere die Blöcke und erstelle daraus einen Template-Teil oder ein synchronisiertes Muster. Änderungen daran gelten dann überall.
  4. Speichern.

Praktisch alle früheren Widgets gibt es als Block. Plugins, die noch klassische Widgets mitbringen, lassen sich über den Block „Legacy-Widget“ einbinden, sofern sie das unterstützen.

Klassisches Theme: Widget-Bereich registrieren

Leg zuerst ein Child-Theme an, siehe WordPress-Theme wählen und anpassen. Dann ergänzt du in dessen functions.php:

add_action( 'widgets_init', function () {
    register_sidebar( array(
        'name'          => 'Seitenleiste Beiträge',
        'id'            => 'seitenleiste-beitraege',
        'description'   => 'Erscheint neben einzelnen Beiträgen.',
        'before_widget' => '<section id="%1$s" class="widget %2$s">',
        'after_widget'  => '</section>',
        'before_title'  => '<h2 class="widget-title">',
        'after_title'   => '</h2>',
    ) );
} );

Die id muss eindeutig sein und nur Kleinbuchstaben, Zahlen und Bindestriche enthalten. Danach erscheint unter Design → Widgets der neue Bereich.

Widget-Bereich im Template ausgeben

Damit die Widgets auch sichtbar werden, rufst du den Bereich im passenden Template auf, zum Beispiel in einer Kopie der single.php oder sidebar.php im Child-Theme:

<?php if ( is_active_sidebar( 'seitenleiste-beitraege' ) ) : ?>
    <aside class="seitenleiste" role="complementary">
        <?php dynamic_sidebar( 'seitenleiste-beitraege' ); ?>
    </aside>
<?php endif; ?>

is_active_sidebar() verhindert, dass ein leerer Container ausgegeben wird, wenn noch keine Widgets zugewiesen sind. Das Aussehen passt du per CSS an.

Klassische Widget-Oberfläche zurückholen

Seit WordPress 5.8 verwaltet auch ein klassisches Theme seine Widgets mit einem Block-Editor. Wer die alte Oberfläche mit Ziehen und Ablegen bevorzugt, installiert das offizielle Plugin Classic Widgets. Alternativ schaltest du den Block-Editor für Widgets per Code ab:

add_filter( 'use_widgets_block_editor', '__return_false' );

Für Fortgeschrittene: Widgets per WP-CLI

# Registrierte Widget-Bereiche anzeigen
wp sidebar list

# Widgets in einem Bereich anzeigen
wp widget list seitenleiste-beitraege

# Suchfeld als Widget hinzufügen
wp widget add search seitenleiste-beitraege 1

Eigene Widgets mit neuen Funktionen programmierst du heute meist als Block. Wie das geht, beschreibt Eigene Widgets und Blöcke schreiben. Weitere Gestaltungsfragen findest du im Bereich Themes & Design.

Frage dazu? Dein Widget-Bereich erscheint nicht? Frag im Forum „Themes & Design“: Zum WPDE-Forum

Häufige Fragen

Kann ich einem Block-Theme Widget-Bereiche hinzufügen?

Technisch ist register_sidebar() auch dort möglich, die Bereiche erscheinen aber nicht automatisch im Layout. Sinnvoller sind Template-Teile und Muster im Site Editor.

Meine Widgets sind nach einem Theme-Wechsel weg. Was ist passiert?

Widgets gehören zu den Bereichen des alten Themes. Nach dem Wechsel landen sie unter „Inaktive Widgets“ und du weist sie den neuen Bereichen zu.

Quellen

Über den Autor: Norbert Hofmann

Norbert betreibt das WPDE-Forum und hat jahrelang im technischen Support eines Webhosters täglich WordPress-Seiten betreut. Heute arbeitet er als Cyber Defense Analyst, hat Sicherheitslücken in WordPress-Plugins gefunden (veröffentlichte CVEs) und engagiert sich mit deepfake.de gegen Betrug mit Deepfakes. Mehr auf norberthofmann.com.

Weitere Antworten