WordPress: vom Einstieg bis zur Entwicklung · Modul 2: PHP-Grundlagen für WordPress

Lektion 2 von 5Übung 14 Min.

Bedingungen und Schleifen

Lernziele
  • Entscheidungen mit if, elseif und else programmieren
  • Werte sicher vergleichen und den Unterschied zwischen == und === kennen
  • mit foreach, for und while Wiederholungen ausdrücken
  • den WordPress-Loop lesen und verstehen

Programme werden erst durch Entscheidungen und Wiederholungen nützlich. Eine Kursseite soll „ausgebucht“ zeigen, wenn keine Plätze mehr frei sind, sonst einen Buchungsknopf. Eine Übersicht soll alle Kurse nacheinander ausgeben, ohne dass jemand für jeden Kurs Code schreibt. Genau dafür gibt es Bedingungen und Schleifen. In WordPress begegnen sie einem überall – vom Loop, der Beiträge ausgibt, bis zu Prüfungen, ob ein Benutzer etwas darf. Diese Lektion zeigt die wichtigsten Formen und eine Falle, die in PHP besonders tückisch ist: den Vergleich von Werten unterschiedlichen Typs.

1. Bedingungen

Definition 2.1
Bedingung
Eine Anweisung, die Code nur ausführt, wenn ein Ausdruck wahr ist. In PHP mit if ( … ) { … }, ergänzt um elseif für weitere Fälle und else für alle übrigen.
DurchlaufEine Kurskarte mit Bedingungen
kurskarte.php
1<?php
2$frei = 0;
3$warteliste = true;
4
5if ( $frei > 3 ) {
6 echo 'Plätze frei';
7} elseif ( $frei > 0 ) {
8 echo "Nur noch $frei Plätze!";
9} elseif ( $warteliste ) {
10 echo 'Ausgebucht – Warteliste offen';
11} else {
12 echo 'Ausgebucht';
13}

Variablen

$frei0
$wartelistetrue

Ausgabe

 
Schritt 1/4: Ausgangslage: keine freien Plätze, Warteliste aktiv.
Tab. 2.1Wichtige Operatoren
OperatorBedeutungBeispiel
=== !==gleich / ungleich (Wert und Typ)$status === 'publish'
< > <= >=kleiner, größer …$frei > 0
&& || !und, oder, nicht$frei > 0 && ! $gesperrt
??Standardwert, falls nicht gesetzt$_GET['seite'] ?? 1
? :Kurzform für if/else$frei ? 'buchen' : 'Warteliste'

2. Die Vergleichsfalle

PHP kennt zwei Arten, Werte zu vergleichen. Der lose Vergleich mit == wandelt Typen vorher um und kann zu Überraschungen führen. Der strenge Vergleich mit === prüft Wert und Typ. Probieren Sie es aus:

Labor== oder ===? Vergleiche in PHP 8
vergleichen mit
0 == "0"true
0 === "0"false

Typen: int und string. Vereinfachte Nachbildung der PHP-8-Regeln für Zahlen, Texte, true/false und null.

Achtung: == hält die Werte für gleich, === nicht, weil die Typen verschieden sind. In WordPress-Code fast immer === verwenden.

Die WordPress-Richtlinien empfehlen deshalb, fast immer === und !== zu verwenden. Besonders tückisch sind Werte aus Formularen und der Datenbank: Sie kommen meist als Text an, auch wenn es Zahlen sind. Wer eine Zahl erwartet, wandelt den Wert vorher ausdrücklich um, etwa mit (int) oder absint(), und vergleicht dann streng.

Vergleichen Sie mit === statt ==. Werte aus Formularen, Adressen und der Datenbank sind meist Texte – wandeln Sie sie bewusst in den erwarteten Typ um.

3. Schleifen

Schleifen wiederholen Code. Die wichtigste in WordPress ist foreach, die jedes Element eines Arrays nacheinander durchläuft. for zählt eine feste Anzahl von Durchläufen, while wiederholt, solange eine Bedingung wahr ist. Sagen Sie voraus, was diese Schleife ausgibt:

VorhersageWas gibt die Schleife aus?
schleife.php
1<?php
2$kurse = [ 'Yoga', 'Pilates', 'Meditation' ];
3foreach ( $kurse as $nr => $kurs ) {
4 echo ( $nr + 1 ) . '. ' . $kurs . ' ';
5}
Was gibt dieser Code aus? Wählen Sie eine Antwort.
ÜbungWelche Schleife passt?
  1. Alle Kurse aus einer Liste nacheinander ausgeben

  2. Die Zahlen 1 bis 12 für Monatsnamen erzeugen

  3. Beiträge ausgeben, solange WordPress noch welche liefert (the Loop)

  4. Für jede Kursleitung ihren Namen in eine Liste schreiben

0 von 4 eingeschätzt

4. Der WordPress-Loop

Der bekannteste Einsatz einer Schleife in WordPress ist der Loop: der Code, der in klassischen Themes die Beiträge einer Seite ausgibt. Auch wer nur mit Block-Themes arbeitet, begegnet ihm in Plugins, Shortcodes und älterem Code. Klicken Sie sich hindurch:

Der klassische Loop
1<?php
2if ( have_posts() ) {
3 while ( have_posts() ) {
4 the_post(); // nächsten Beitrag vorbereiten
5 the_title( '<h2>', '</h2>' ); // Titel ausgeben
6 the_excerpt(); // Auszug ausgeben
7 }
8} else {
9 echo '<p>Keine Beiträge gefunden.</p>';
10}
Klick-GrafikWas der Loop tut
have_posts()?the_post()AusgabeEnde
Schritt 1/4 · Gibt es Beiträge?: have_posts() prüft, ob die Abfrage noch Beiträge enthält, die ausgegeben werden können.

5. Eigene Abfragen

Häufig sollen nicht die Beiträge der aktuellen Seite ausgegeben werden, sondern eine eigene Auswahl – etwa die nächsten drei Kurse für Einsteiger. Dafür gibt es die Klasse WP_Query, der man die gewünschten Kriterien als Array übergibt. Wichtig ist, danach wp_reset_postdata() aufzurufen, damit der Rest der Seite wieder den ursprünglichen Beitrag kennt.

Eine eigene Abfrage
1<?php
2$abfrage = new WP_Query( [
3 'post_type' => 'kurs',
4 'posts_per_page' => 3,
5 'tax_query' => [ [ 'taxonomy' => 'niveau', 'field' => 'slug', 'terms' => 'einsteiger' ] ],
6] );
7
8foreach ( $abfrage->posts as $kurs ) {
9 echo '<li>' . esc_html( get_the_title( $kurs ) ) . '</li>';
10}
11wp_reset_postdata();

6. Endlosschleifen vermeiden

Eine Schleife, deren Bedingung nie falsch wird, läuft endlos – bis PHP sie nach der maximalen Ausführungszeit abbricht und die Seite mit einem Fehler endet. Typische Ursachen sind ein vergessenes the_post() im Loop, ein Zähler, der nie erhöht wird, oder eine Abfrage innerhalb der Schleife, die immer wieder dieselben Ergebnisse liefert. Ebenso wichtig ist die Anzahl der Durchläufe: Eine Datenbankabfrage innerhalb einer Schleife über hundert Beiträge erzeugt hundert Abfragen und macht die Seite langsam. Besser ist, alle benötigten Daten vorher mit einer Abfrage zu holen und dann nur noch zu durchlaufen.

7. Ein Beispiel

Ein Yogastudio möchte auf der Startseite die nächsten Kurse anzeigen, mit einem Hinweis, wenn nur noch wenige Plätze frei sind. Der Code holt mit einer einzigen WP_Query die nächsten fünf Kurse, durchläuft sie mit foreach, liest für jeden Kurs die freien Plätze aus einem Feld, wandelt den Wert mit (int) in eine Zahl um und entscheidet mit if, elseif und else, ob „Plätze frei“, „Nur noch 2 Plätze“ oder „Warteliste“ angezeigt wird. Alle Ausgaben laufen durch esc_html. Zwanzig Zeilen Code ersetzen eine Liste, die das Team bisher jede Woche von Hand gepflegt hat.

8. Häufige Fragen

Wann nehme ich switch oder match statt vieler elseif? Wenn ein einzelner Wert mit vielen möglichen Fällen verglichen wird. Seit PHP 8 gibt es match, das streng vergleicht und einen Wert zurückgibt, etwa $farbe = match ( $status ) { 'frei' => 'grün', 'wenig' => 'orange', default => 'rot' }; Das ist kürzer und sicherer als eine lange elseif-Kette.

Warum steht in WordPress-Code oft die Konstante links, etwa if ( 'publish' === $status )? Das ist eine Konvention der WordPress-Richtlinien, die sogenannte Yoda-Bedingung. Sie verhindert, dass ein versehentliches einzelnes Gleichheitszeichen unbemerkt eine Zuweisung statt eines Vergleichs erzeugt, weil man einem festen Text nichts zuweisen kann.

Muss ich den klassischen Loop noch lernen, wenn ich Block-Themes nutze? Für Block-Themes wird er nicht mehr gebraucht, dort übernimmt der Abfrage-Block diese Aufgabe. Er begegnet einem aber in vielen Plugins, in älteren Themes und in Anleitungen, deshalb lohnt es sich, ihn lesen zu können.

9. Übung zum Selbermachen

Erweitern Sie die Übung der vorigen Lektion in WordPress Playground: Legen Sie ein Array mit drei Kursen an, jeder mit Titel und freien Plätzen. Durchlaufen Sie das Array mit foreach und geben Sie für jeden Kurs eine Zeile aus. Verwenden Sie if, elseif und else, um „Plätze frei“, „Nur noch wenige Plätze“ (bei höchstens zwei) oder „Ausgebucht“ anzuzeigen. Vergleichen Sie dabei streng mit ===, und wandeln Sie die Platzzahl vorher mit (int) um, als käme sie aus einem Formular.

Als zweite Aufgabe schreiben Sie die Bedingung mit match um. Vergleichen Sie beide Fassungen: Welche ist leichter zu lesen? In WordPress-Code finden sich beide Formen, und es lohnt sich, sicher zwischen ihnen wechseln zu können. Wer möchte, ersetzt das Array anschließend durch eine echte Abfrage mit get_posts( [ 'post_type' => 'post', 'numberposts' => 3 ] ) und gibt die Titel der drei neuesten Beiträge aus.

Quellen und weiterführende Literatur
  1. [1]The PHP Group (2026): PHP Manual – Control Structures; Comparison Operators; match. php.net/manual.
  2. [2]WordPress.org (2026): The Loop – Theme Handbook. developer.wordpress.org/themes.
  3. [3]WordPress.org (2026): WP_Query – Code Reference. developer.wordpress.org/reference.
  4. [4]WordPress.org (2026): PHP Coding Standards – Yoda Conditions.

Stand: September 2026, WordPress 7.1, PHP 8.3. Kursmaterial der Klarwerk Akademie. WordPress entwickelt sich schnell – maßgeblich ist die aktuelle Dokumentation auf developer.wordpress.org.

Abschlussquiz

Drei Fragen – dann ist die Lektion geschafft.

Frage 1 von 3

Warum === statt ==?