Widget Conditional Tags
Mit diesem Plugin bist du in der Lage bei den WordPress-Widgets (in der klassischen Ansicht) die Conditional Tags zu nutzen.
by Vladimir Simović · github.com/perun/widget-conditional-tags · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/perun/widget-conditional-tags/releases/download/1.2.0/widget-conditional-tags-1.2.0.zipReadme
Widget Conditional Tags
Zeigt klassische WordPress-Widgets abhängig von Conditional Tags an oder blendet sie aus. Als schlanker, sicherer Nachfolger-Gedanke zu Widget Logic.
Warum noch ein Widget-Bedingungs-Plugin?
Widget Logic war jahrelang das Standard-Werkzeug dafür. Es wird nicht mehr gepflegt, und sein eigentliches Problem war hausgemacht: Die eingegebene Bedingung wurde per eval() als PHP ausgeführt. Das ist genau die Mechanik, die in mehreren vergleichbaren Plugins zu authentifizierten Remote-Code-Execution-Lücken geführt hat.
Dieses Plugin geht den umgekehrten Weg. Es führt keinen PHP-Code aus. Stattdessen liest ein kleiner Tokenizer und ein Recursive-Descent-Parser eine bewusst eng gehaltene Ausdruckssprache und ruft ausschließlich Funktionen aus einer Whitelist auf. Damit fällt die ganze Klasse von eval-Lücken strukturell weg – nicht durch nachträgliche Filter, sondern durch das Design.
Bewusste Reduktion gegenüber Widget Logic: weniger Freiheit, dafür keine Angriffsfläche. Für die allermeisten realen Fälle reicht das.
Funktionen
- Bedingungsfeld unter jedem klassischen Widget
- Conditional Tags positiv oder negativ:
is_home,!is_search() - Verknüpfung mit
AND/&&undOR/||, Klammern für Gruppierung - Operator-Vorrang:
NOT>AND>OR - Validierung schon beim Speichern, mit verständlicher Fehlermeldung
- Erweiterbar per Filter für eigene parameterlose Conditional Tags
- Hinweis im Backend, falls der Block-Widget-Editor aktiv ist und die klassische Oberfläche fehlt
- Vollständig übersetzbar (Text Domain
widget-conditional-tags)
Beispiele
is_home() OR is_archive()
is_paged() OR is_archive()
(is_single() OR is_page()) AND !is_paged()
!is_search()
Leeres Feld = Widget wird überall angezeigt.
Erlaubte Conditional Tags
is_404, is_archive, is_attachment, is_author, is_category, is_date, is_day, is_feed, is_front_page, is_home, is_month, is_page, is_paged, is_post_type_archive, is_privacy_policy, is_search, is_single, is_singular, is_sticky, is_tag, is_tax, is_time, is_user_logged_in, is_year.
Bewusst (noch) nicht enthalten
- Parameter wie
is_page( 42 )oderis_category( 'news' ). Nur leere Klammern werden toleriert. Parameter würden den Parser deutlich vergrößern und müssten garantieren, dass wirklich nur Literale durchgehen. - Block-Widget-Editor. Das Plugin setzt auf die klassische Widget-Oberfläche und die Hooks
in_widget_form,widget_update_callbackundwidget_display_callback. Im Block-Editor greift die Anzeige-Logik nicht; ist der Block-Editor aktiv, weist das Plugin im Backend darauf hin und verlinkt das Plugin „Classic Widgets".
Voraussetzungen
- WordPress mit klassischer Widget-Oberfläche, z. B. über das Plugin „Classic Widgets"
- WordPress 6.5 oder neuer, PHP 7.4 oder neuer
Installation
- Den Ordner
widget-conditional-tagsnach/wp-content/plugins/kopieren (oder das ZIP über Plugins → Installieren → Plugin hochladen einspielen). - Plugin aktivieren.
- Klassische Widgets-Seite öffnen.
- Unter einem Widget die Bedingung eintragen.
Für Entwickler: eigene Bedingungen ergänzen
add_filter( 'wct_allowed_conditions', static function ( $conditions ) {
// Muss ohne Parameter aufrufbar sein und boolean-artig zurückgeben.
$conditions['is_woocommerce'] = 'is_woocommerce';
return $conditions;
} );
Sicherheit
- Kein
eval(), keincall_user_funcauf ungeprüfte Strings, kein$$variable. - Jeder Tag wird gegen die Whitelist geprüft und zusätzlich per
is_callable()abgesichert. - Lässt sich eine gespeicherte Bedingung nicht mehr auswerten, wird das Widget ausgeblendet statt eingeblendet (fail closed) – das Verhalten bleibt im Fehlerfall vorhersagbar.
- Capability-Prüfung (
edit_theme_options) beim Speichern; der Standard-Widget-Speicherpfad bringt den Nonce-Schutz mit. - Eingaben werden beim Speichern bereinigt, alle Ausgaben im Backend escaped.
Wichtig: Das Plugin steuert die Sichtbarkeit von Widgets, es ist kein Zugriffsschutz. Vertrauliche Inhalte gehören nicht allein über eine Anzeige-Bedingung abgesichert.
Lizenz
GPL-2.0-or-later. https://github.com/Perun/widget-conditional-tags/blob/main/LICENSE
Autor
Vladimir Simović — perun.net
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| 1.2.0 | Jun 16, 2026 | widget-conditional-tags-1.2.0.zip | 0 |