
📋 Vollständiger WordPress-Spickzettel
functions.php geöffnet und vergessen, wie man die Sidebar einbindet? Das passiert jedem, der ein WordPress-Theme von Hand programmiert. Sie brauchen eine Seite griffbereit, nicht zehn Tabs von developer.wordpress.org.
Hier finden Sie das WordPress-Entwicklungs-Essential: 13 Template-Dateien und die Hierarchie zu ihrer Auswahl, den grundlegenden Loop, Include-Tags und bloginfo()-Parameter, danach Hooks und Filter, Conditional Tags, Script-Enqueueing, Shortcodes, WP_Query, Daten-Escaping, REST-API und WP-CLI-Befehle. Alle Codebeispiele funktionieren. Lassen Sie diesen Tab während der Entwicklung geöffnet und prüfen Sie bei Bedarf nach.
💡 Kurzübersicht:
- Setzen Sie ein Lesezeichen auf diese Seite und halten Sie sie beim Theme-Bau in einem separaten Tab geöffnet.
- Beginnen Sie mit dem Abschnitt „Anatomie eines Themes": Legen Sie die Theme-Dateien aus der Liste an, bevor Sie Code schreiben.
- Kopieren Sie den grundlegenden WordPress Loop in die
index.phpund umschließen Sie ihn mit Include-Tags für Header, Sidebar und Footer. - Setzen Sie
bloginfo()- undget_bloginfo()-Tags aus der Tabelle direkt in Templates ein und gleichen Sie sie mit der Spalte „Ausgabe" ab. - Gehen Sie vor der Veröffentlichung die
style.css-Regeln durch: CSS validieren, minimieren und Druck-Styles hinzufügen. - Weiter unten auf der Seite die Referenz: Template-Hierarchie, Hooks und Filter, Conditional Tags, Script-Enqueueing, Shortcodes,
WP_Query, Escaping, REST-API und WP-CLI.
Anatomie eines WordPress-Themes

Ein WordPress-Theme ist ein Satz von PHP-Dateien, die durch eine gemeinsame Logik verbunden und durch die Template-Hierarchie gesteuert werden. Die Schlüsselkomponente: style.css, die das visuelle Styling übernimmt und zugleich als Theme-Kennung im Admin dient. Das Fundament jedes klassischen Themes sind jedoch PHP-Templates: Jedes bearbeitet seinen eigenen Seitenabschnitt und wird in der von der WordPress-Hierarchie vorgegebenen Reihenfolge aufgerufen.
Für ein Standard-Theme benötigen Sie die folgenden Dateien, dreizehn an der Zahl, die jeweils eine bestimmte Site-Zone abdecken:
- header.php, der
<head>-Bereich und Seitenkopf: Metadaten, Seitentitel, Einbindung vonstyle.css, öffnendes<body>-Tag. - index.php, das Haupt-Template, Einstiegspunkt. Fügt andere Dateien über Include-Tags zu einer einheitlichen Seite zusammen. Existiert kein spezialisiertes Template, greift WordPress auf
index.phpzurück. - sidebar.php, die Seitenleiste: Widgets, Kategorien, Suche, sekundäres Menü.
- footer.php, der Footer: Copyright, Social Links, Analyse-Skripte, schließende
</body></html>-Tags. - page.php, Template für Seiten (statische Inhalte, „Über uns", „Kontakt").
- single.php, Template für einen einzelnen Blogbeitrag.
- comments.php, Kommentarblock und Absendeformular.
- 404.php, 404-Fehlerseite. Fehlt diese Datei, zeigt WordPress eine Standard-Systemmeldung, was für den Besucher schlechter ist.
- search.php, Template für Suchergebnisse.
- searchform.php, Suchformular (in klassischen Themes; moderne nutzen oft ein Widget).
- archive.php, Template für Archive: Kategorien, Schlagwörter, Datumsarchive.
- functions.php, das funktionale Herz des Themes: eigene Hooks, Script- und Style-Enqueueing, Menü-Registrierung, Widget-Bereiche, Custom Post Types. Alles, was Theme-Funktionalität hinzufügt, lebt hier.
- style.css, die einzige Nicht-PHP-Datei der Liste, aber ohne sie existiert das Theme nicht: Sie speichert den Theme-Header und definiert das Erscheinungsbild der Site.
Sie kommen mit weniger Templates aus, zum Beispiel bilden index.php + style.css bereits ein Minimal-Theme. Für eine vollwertige Site ist es jedoch besser, alle dreizehn vorzuhalten: Jede Datei ist auf ihre eigene Aufgabe zugeschnitten, und WordPress wählt selbst die richtige nach Hierarchie aus. Eine typische index.php sieht so aus:
1 <?php get_header(); ?> 2 3 <!-- Main content, including the Loop --> 4 5 <?php get_sidebar(); ?> 6 <?php get_footer(); ?>
Weiter zum wichtigsten Code-Fragment, ohne das kein einziger Beitrag angezeigt wird.
Der WordPress Loop
Der Loop ist der zentrale Mechanismus zur Ausgabe von Inhalten. Ohne ihn müssten Sie die Anzeige jedes Beitrags und jeder Seite manuell im Theme-Template programmieren. Der Loop tut genau das, was sein Name verspricht: Er durchläuft alle Beiträge, die zur aktuellen Abfrage passen, und wendet auf jeden Ihr festgelegtes HTML/PHP-Markup an.
Grundlegende Loop-Syntax:
1 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 2 <!-- HTML markup and template tags for each post --> 3 <?php endwhile; endif; ?>
have_posts() prüft, ob Beiträge zur Ausgabe vorhanden sind. Wenn ja, initialisiert the_post() den internen WordPress-Zeiger auf den aktuellen Beitrag, wonach Dutzende Template-Tags innerhalb des Loops verfügbar werden: the_title() für den Titel, the_content() für den Beitragstext, the_permalink() für den Link, the_excerpt() für den Auszug und viele weitere.
Der Loop steht üblicherweise in der index.php, um eine Beitragsliste auszugeben, aber nichts hindert Sie daran, ihn in single.php, page.php oder archive.php zu verwenden, die Logik ist dieselbe, nur der Kontext unterscheidet sich. Fügen Sie innerhalb des Loops beliebige HTML-Wrapper und PHP-Tags hinzu, WordPress wendet sie der Reihe nach auf jeden Beitrag an.
Praxisbeispiel, Ausgabe von Titel und Datum jedes Beitrags:
1 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 2 <article> 3 <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> 4 <time><?php echo get_the_date(); ?></time> 5 </article> 6 <?php endwhile; endif; ?>
Nun dazu, wie der Loop mit dem Rest des Themes interagiert, über Include-Tags.
Template-Include-Tags
Include-Tags sind PHP-Funktionen, die den Inhalt einer Theme-Datei in eine andere laden. Sie bilden das Skelett einer typischen index.php: Header, Inhalt, Sidebar, Footer. Vier grundlegende Funktionen:
<?php get_header(); ?>, bindetheader.phpein. Üblicherweise die erste Zeile inindex.phpund jedem anderen Template, das einen Header benötigt.<?php get_sidebar(); ?>, bindetsidebar.phpein. Wird die Sidebar nicht benötigt, entfernen Sie einfach den Aufruf.<?php get_footer(); ?>, bindetfooter.phpein. Steht immer am Ende des Templates und schließt die Seite ab.<?php comments_template(); ?>, bindetcomments.phpein. Wird innerhalb vonsingle.phpplatziert, nach der Ausgabe des Beitragsinhalts.
Alle vier Funktionen suchen die Dateien im aktiven Theme-Ordner. Existiert die Datei nicht, gibt WordPress einfach nichts aus (außer bei get_header() und get_footer(), deren Fehlen das Layout zerstört).
Die nächste Ebene, Tags, die nicht nur Dateien einbinden, sondern Daten aus der Datenbank extrahieren.
Bloginfo-Tags

Die bloginfo()-Tags extrahieren Informationen über die Site aus der WordPress-Datenbank, dieselben Informationen, die Sie unter Einstellungen → Allgemein und im Benutzerprofil hinterlegen. Die Funktion gibt einen String zurück und gibt ihn direkt auf dem Bildschirm aus. Die am häufigsten verwendeten Parameter:
Parameter | Ausgabe |
|---|---|
| Titel der Website |
| URL der Website |
| Untertitel (Beschreibung der Website) |
| Zeichensatz (Standard UTF-8) |
| URL der |
| Installierte WordPress-Version |
| Sprache der Website |
| URL des RSS-Feeds (RSS 0.92) |
| URL des RSS-Feeds (RSS 2.0) |
Das ist nur die Spitze des Eisbergs, die vollständige Parameterliste finden Sie in der WordPress-Dokumentation.
Get_bloginfo(), wenn Sie speichern statt ausgeben müssen
Für Fälle, in denen Site-Informationen im Code verwendet und nicht nur auf der Seite angezeigt werden sollen, nutzen Sie die Funktion get_bloginfo():
1 <?php $info = get_bloginfo( $show, $filter ); ?>
$show, das Schlüsselwort. Unterstützte Werte sind'name'(Titel),'url'(Adresse),'description'(Untertitel),'admin_email'(Admin-E-Mail) und weitere; vollständige Liste in der Dokumentation.$filter, Filtermodus:'raw'(Wert „wie er ist", Standard) oder'display'(Wert wird durchwptexturize()geleitet, wandelt Anführungszeichen, Gedankenstriche, Zeichen um).
Beispiel: Die Seitenbeschreibung abrufen und mit einem Präfix ausgeben:
1 <?php $site_description = get_bloginfo( 'description' ); ?> 2 <?php echo 'Your site tagline: ' . esc_html( $site_description ); ?>
Ergebnis: „Ihr Website-Untertitel: Beste Premium-WordPress-Themes".
Neben bloginfo verfügt WordPress über ein umfangreiches System von Template-Tags: allgemeine Tags, Autoren-Tags, Thumbnail-Tags, Kategorie-Tags, Link-Tags, die alle sowohl innerhalb als auch außerhalb des Loops funktionieren, und Kombinationen daraus geben Ihnen die volle Kontrolle über die Inhaltsausgabe.
Theme-Stylesheet
style.css erfüllt zwei Aufgaben. Erstens die Identifikation: Der Header ganz oben in der Datei teilt WordPress Theme-Name, Autor, Version und Lizenz mit. Zweitens die visuelle Darstellung: alle CSS-Regeln, die das Erscheinungsbild der Website steuern. Ein Standard-Header sieht so aus:
1 /* 2 Theme Name: Theme Name 3 Theme URI: https://www.example.com/theme 4 Author: Your Name 5 Author URI: https://www.example.com/ 6 Description: Responsive WordPress theme with support for... 7 Version: 1.0 8 License: GNU General Public License v2 or later 9 License URI: http://www.gnu.org/licenses/gpl-2.0.html 10 Tags: responsive, two-columns, right-sidebar, custom-header 11 Text Domain: mythemename 12 */
Bewährte Vorgehensweisen bei der Arbeit mit style.css:
- Befolgen Sie die WordPress CSS Coding Standards, einheitlicher Stil vereinfacht die Wartung.
- Validieren Sie das CSS mit dem W3C-Validator.
- Minifizieren Sie CSS in der Produktion, behalten Sie aber eine lesbare Quelle für die Entwicklung.
- Fügen Sie Druckstile hinzu (
@media print), viele Leser drucken Artikel aus. - Stylen Sie alle Standard-HTML-Elemente, die im Beitragsinhalt vorkommen können.
WordPress Template-Hierarchie
Bei jeder Anfrage entscheidet WordPress selbst, welche Theme-PHP-Datei eingebunden wird, das ist die Template-Hierarchie. Eine Regel: von der spezifischsten Datei zur allgemeinsten, mit index.php als letztem Fallback für jeden Zweig. Wer die Reihenfolge kennt, spart sich die Frage „Warum erscheint meine Änderung an single.php nicht auf der Kategorieseite".
1 Single post → single-{post_type}-{slug}.php → single-{post_type}.php → single.php → singular.php → index.php 2 Page → {template from editor}.php → page-{slug}.php → page-{id}.php → page.php → singular.php → index.php 3 Category → category-{slug}.php → category-{id}.php → category.php → archive.php → index.php 4 Archive → archive-{post_type}.php → archive.php → index.php 5 Search → search.php → index.php 6 404 error → 404.php → index.php 7 Front page → front-page.php → home.php → index.php
WordPress nimmt die erste existierende Datei von links nach rechts. single-product.php überschreibt also single.php nur für Einträge des Beitragstyps product und lässt den Rest unberührt.
Hooks: Actions und Filter
Hooks sind Erweiterungspunkte in WordPress: Sie erlauben es, in die Kernfunktionalität einzugreifen, ohne deren Dateien zu bearbeiten. Actions führen einen Seiteneffekt aus (Skript einreihen, E-Mail versenden), Filter erhalten einen Wert, modifizieren ihn und müssen ihn zurückgeben. Ein vergessenes return in einem Filter ist die häufigste Ursache für leere Inhalte.
1 // Registration 2 add_action( 'hook_name', 'callback', 10, 1 ); // priority, number of arguments 3 add_filter( 'hook_name', 'callback', 10, 1 ); 4 5 // Execution (in core or your code) 6 do_action( 'hook_name', $arg ); // action: returns nothing 7 apply_filters( 'hook_name', $value, $arg ); // filter: RETURNS value 8 9 // Removal (priority must match the one used when adding) 10 remove_action( 'hook_name', 'callback', 10 );
Beispiel: Einen Absatz am Ende jedes Beitrags hinzufügen:
1 add_filter( 'the_content', 'my_append_note', 20 ); 2 function my_append_note( $content ) { 3 return $content . '<p>Thanks for reading!</p>'; // without return content disappears 4 }
Wichtige Theme-Hooks:
after_setup_theme, registriert Feature-Unterstützung (add_theme_support()), Menüs, Thumbnail-Größen.wp_enqueue_scripts, der einzig korrekte Ort, um Frontend-CSS und -JS einzureihen.init, frühe Initialisierung: Beitragstypen und Shortcodes registrieren.the_content, filtert Beitrags-HTML vor der Ausgabe.
Niedrigere Priorität läuft früher (Standard 10). Soll ein Callback mehr als ein Argument erhalten, erhöhen Sie den vierten Parameter accepted_args.
Conditional Tags
Conditional Tags sind Funktionen, die true oder false zurückgeben, je nachdem, welche Seite gerade geöffnet ist. Sie bilden die Logik für „Zeige Sidebar hier, aber nicht auf der 404-Seite".
1 is_home() // blog post feed 2 is_front_page() // site front page 3 is_single() // single post 4 is_page() // single page 5 is_singular() // any single post/page/CPT 6 is_archive() // any archive 7 is_category() // category archive 8 is_search() // search results page 9 is_404() // 404 error page 10 is_user_logged_in() // user is logged in 11 is_admin() // request is in admin (NOT "user is administrator")
Die Hauptfalle: Query Conditional Tags (is_single, is_page, is_home und andere) funktionieren erst, nachdem die Hauptabfrage gebildet wurde, also innerhalb von Template-Dateien und dem Loop oder ab dem template_redirect-Hook. Ein Aufruf zu früh in functions.php oder auf init ist zu zeitig: WordPress gibt _doing_it_wrong() aus und liefert ein falsches Ergebnis. Ausnahmen sind is_admin() und is_user_logged_in(), sie hängen nicht von der Abfrage ab und sind früher verfügbar. Und denken Sie daran: is_admin() prüft den Kontext (Admin vs. Frontend), nicht die Rolle; für die Rolle nutzen Sie current_user_can( 'manage_options' ).
Einreihen von Skripten und Styles
Die Versuchung, <link> und <script> direkt in header.php zu schreiben, ist groß, aber es ist ein Fehler: Sie verlieren Abhängigkeitsmanagement, Versionierung für Cache-Busting, defer/async-Strategien und den Schutz vor doppeltem Laden (zwei Plugins können leicht zweimal jQuery einreihen). Der korrekte Weg ist die WordPress-Warteschlange auf dem wp_enqueue_scripts-Hook.
1 add_action( 'wp_enqueue_scripts', 'my_theme_assets' ); 2 function my_theme_assets() { 3 // Theme style with version from style.css header 4 wp_enqueue_style( 5 'my-theme', 6 get_stylesheet_uri(), 7 array(), 8 wp_get_theme()->get( 'Version' ) 9 ); 10 11 // Script with dependency and modern syntax (WP 6.3+) 12 wp_enqueue_script( 13 'my-app', 14 get_theme_file_uri( 'assets/js/app.js' ), 15 array( 'jquery' ), // dependencies 16 '1.0.0', // version → cache busting 17 array( 18 'in_footer' => true, 19 'strategy' => 'defer', 20 ) 21 ); 22 }
Seit WordPress 6.3 ist der letzte Parameter von wp_enqueue_script() ein $args-Array (in_footer, strategy), wobei die alte Form mit booleschem true für Footer weiterhin funktioniert. Für das Frontend nutzen Sie wp_enqueue_scripts, für das Admin-Backend admin_enqueue_scripts, für die Login-Seite login_enqueue_scripts.
Shortcodes
Shortcodes verwandeln einen kurzen Eintrag in eckigen Klammern in beliebiges HTML, praktisch für Buttons, Galerien und Formulare innerhalb von Inhalten. Der Handler muss einen String zurückgeben, nicht per echo ausgeben, sonst „springt" das Ergebnis an den Seitenanfang.
1 add_shortcode( 'btn', 'my_button_shortcode' ); 2 function my_button_shortcode( $atts, $content = null, $tag = '' ) { 3 $a = shortcode_atts( 4 array( 'url' => '#', 'label' => 'Button' ), 5 $atts, 6 $tag 7 ); 8 return sprintf( 9 '<a class="btn" href="%s">%s</a>', 10 esc_url( $a['url'] ), // escape on output 11 esc_html( $a['label'] ) 12 ); 13 } 14 // Usage in post: [btn url="https://example.com" label="Buy"]
shortcode_atts() legt Benutzerattribute über Standardwerte. Müssen Sie Shortcodes innerhalb eines Strings oder Templates ausführen, umschließen Sie sie mit do_shortcode(), aber um Ihre eigene Funktion aufzurufen, rufen Sie sie direkt auf, ohne den Umweg.
WP_Query und benutzerdefinierte Abfragen
WP_Query ist die Klasse für beliebige Beitragsauswahlen: neueste Nachrichten in der Sidebar, Kategorie-Zusammenstellung, Feed eines benutzerdefinierten Beitragstyps. Rufen Sie nach Ihrem Loop immer wp_reset_postdata() auf, sonst erhalten Template-Tags weiter unten auf der Seite den falschen Beitrag.
1 $q = new WP_Query( array( 2 'post_type' => 'post', 3 'posts_per_page' => 5, 4 'category_name' => 'news', 5 'orderby' => 'date', 6 'order' => 'DESC', 7 ) ); 8 9 if ( $q->have_posts() ) { 10 while ( $q->have_posts() ) { 11 $q->the_post(); 12 the_title( '<h3>', '</h3>' ); 13 } 14 wp_reset_postdata(); // restore global $post 15 }
Um die Hauptabfrage der Seite zu modifizieren (zum Beispiel Anzahl der Beiträge auf der Startseite), nutzen Sie nicht das veraltete query_posts(), es führt eine zusätzliche Datenbankabfrage aus und zerstört die Paginierung. Der korrekte Ansatz ist der pre_get_posts-Hook, der die Abfrage vor ihrer Ausführung modifiziert:
1 add_action( 'pre_get_posts', 'my_main_query' ); 2 function my_main_query( $query ) { 3 if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) { 4 $query->set( 'posts_per_page', 12 ); 5 } 6 }
Sicherheit: Escaping und Sanitization
Die goldene WordPress-Regel: Bereinigen Sie bei der Eingabe, escapen Sie bei der Ausgabe, validieren Sie überall. Jegliche Nutzerdaten werden vor dem Speichern in der Datenbank gesäubert und vor der Ausgabe in HTML escaped, selbst wenn sie bereits gesäubert wurden.
1 // Escaping ON OUTPUT 2 echo esc_html( $text ); // text inside tag 3 echo esc_attr( $value ); // attribute value 4 echo esc_url( $href ); // href/src links 5 echo wp_kses_post( $rich_html ); // safe HTML set for content 6 7 // Sanitization ON INPUT (before writing to DB) 8 $clean = sanitize_text_field( $_POST['name'] ); 9 $email = sanitize_email( $_POST['email'] ); 10 $num = absint( $_POST['count'] );
Schützen Sie Formulare und Aktionen mit Nonces, einmaligen Tokens gegen CSRF:
1 // In form: 2 wp_nonce_field( 'my_save_action', 'my_nonce' ); 3 4 // During processing: 5 if ( ! isset( $_POST['my_nonce'] ) || 6 ! wp_verify_nonce( $_POST['my_nonce'], 'my_save_action' ) ) { 7 return; // request rejected 8 }
In der Praxis sind die meisten Theme- und Plugin-Schwachstellen genau versäumtes Output-Escaping. Machen Sie es sich zur Gewohnheit: Keine einzige Variable geht ohne esc_* in HTML.
WordPress REST API
Die REST API liefert Seitendaten im JSON-Format, genutzt von mobilen Apps, Headless-Frontends und Integrationen. Die Basisadresse lautet /wp-json/wp/v2/.
1 GET /wp-json/wp/v2/posts // posts 2 GET /wp-json/wp/v2/pages // pages 3 GET /wp-json/wp/v2/media // media files 4 GET /wp-json/wp/v2/users // users 5 GET /wp-json/wp/v2/posts/123 // single post 6 GET /wp-json/wp/v2/posts?per_page=5&search=theme&_embed
Eigene Routen werden am rest_api_init-Hook registriert. Der Parameter permission_callback ist verpflichtend, ohne ihn gibt WordPress eine Warnung aus; für öffentliches Lesen nutzen Sie '__return_true'.
1 add_action( 'rest_api_init', function () { 2 register_rest_route( 'myplugin/v1', '/items/(?P<id>\d+)', array( 3 'methods' => 'GET', 4 'callback' => 'my_get_item', 5 'permission_callback' => '__return_true', 6 ) ); 7 } );
WP-CLI: Befehle zur Hand
WP-CLI verwaltet die Seite vom Terminal aus, schneller und zuverlässiger als Klicks im Admin, besonders bei der Pflege mehrerer Seiten. Die gängigsten Befehle:
1 wp core update # update WordPress core 2 wp core version # what version is installed 3 wp plugin install akismet --activate # install and activate plugin 4 wp plugin list # plugin list with status and version 5 wp theme activate twentytwentyfive # switch active theme 6 wp db export backup.sql # database dump to file 7 wp search-replace 'old.com' 'new.com' --dry-run # always dry run first 8 wp user create bob [email protected] --role=editor # create user 9 wp cache flush # flush object cache
wp search-replace versteht serialisierte Daten, ändert also beim Umzug einer Seite sicher die Domain, anders als eine direkte SQL-Abfrage, die die Serialisierung zerstört. Führen Sie vor jeder gefährlichen Operation wp db export aus.
Klassische und Block-Themes im Jahr 2026
Mitte 2026 (aktuelle Version: WordPress 7.0 „Armstrong", empfohlenes PHP 8.3+) sind klassische PHP-Themes weiterhin voll unterstützt und bleiben der am weitesten verbreitete Typ. Aber alle neuen Core-Werkzeuge entwickeln sich in Richtung Block-Themes und Full Site Editing (Full Site Editing): theme.json statt eines Teils der functions.php-Einstellungen, HTML-Templates statt PHP. Der Loop, bloginfo(), Conditional Tags und Hooks bleiben in Hybrid-Themes und jeglichen PHP-Fragmenten innerhalb von FSE-Themes relevant, sodass dieser Spickzettel seinen Wert nicht verliert. Der praktische Weg im Jahr 2026 ist ein klassisches Fundament plus gezielte Block-Unterstützung dort, wo sie tatsächlich benötigt wird.
⁉️🤔 Häufig gestellte Fragen
Ist es zwingend erforderlich, alle 13 Dateien für ein Theme zu erstellen?
Nein, das minimale funktionsfähige Theme besteht aus
index.php+style.css. Für eine voll ausgestattete Website ist es jedoch besser, den vollständigen Satz beizubehalten: Jede Datei gibt WordPress die Möglichkeit, das optimale Template auszuwählen. Ohnesingle.phpbeispielsweise wird ein Beitrag überindex.phpgerendert und verliert den Kommentarblock.
Was ist der Unterschied zwischen get_bloginfo() und bloginfo()?
bloginfo() gibt den Wert sofort auf dem Bildschirm aus (echo). get_bloginfo() gibt einen String an eine Variable zurück, Sie können ihn verarbeiten, an ihn anhängen oder ihn innerhalb eines anderen Ausdrucks verwenden, bevor die eigentliche Ausgabe erfolgt.
Wo platziere ich den Loop, wenn die Seite mehrere Inhaltstypen hat?
Der Loop kann mehrfach gestartet werden. Typisches Szenario: ein Loop für die Hauptbeitragsliste, ein zweiter für ein Widget „Aktuelle Nachrichten" in der Seitenleiste. Setzen Sie vor dem zweiten Loop den Zeiger mit wp_reset_postdata() zurück, andernfalls erhält der nachfolgende Code auf der Seite den falschen Beitragskontext.
Funktioniert dieser Spickzettel für Block-Themes (FSE)?
Teilweise. Block-Themes (Full Site Editing) verwenden
theme.jsonanstelle vonfunctions.phpfür viele Einstellungen und Templates in HTML statt PHP. Aber der Loop,bloginfo()und Include-Tags bleiben für hybride Themes und alle PHP-Templates innerhalb von FSE-Themes relevant.
Was tun, wenn die functions.php zu umfangreich wird?
Lagern Sie die Logik in separate Dateien aus und binden Sie diese aus
functions.phpüberrequire_onceoderincludeein. Zum Beispiel:require_once get_template_directory() . '/inc/custom-post-types.php';. Dies verbessert die Lesbarkeit und vereinfacht die Wartung, eine Best Practice für jedes Theme mit mehr als 20-30 Hooks.
Was ist der Unterschied zwischen einer Action und einem Filter?
Eine Action führt einen Seiteneffekt aus und gibt nichts zurück (ein Skript einreihen, eine E-Mail senden). Ein Filter empfängt einen Wert, modifiziert ihn und muss ihn zurückgeben, ein vergessenes
returnin einem Filter löscht den Inhalt. Sie werden identisch registriert:add_action()undadd_filter().
Warum funktioniert is_single() nicht in der functions.php?
Query Conditional Tags sind erst verfügbar, nachdem die Hauptabfrage gebildet wurde, also in Template-Dateien oder ab dem
template_redirect-Hook. Zu Beginn derfunctions.phpist die Abfrage noch nicht bereit, sodass WordPress_doing_it_wrong()ausgeben wird. Nuris_admin()undis_user_logged_in()funktionieren ohne Abfrageabhängigkeit.
Was Sie bei der Entwicklung mit WordPress griffbereit haben sollten
Dieser Spickzettel ist das Gerüst, von dem aus die WordPress-Entwicklung beginnt. Theme-Dateien und Template-Hierarchie, der Loop, Include-Tags und bloginfo() setzen das Theme zusammen, während Hooks und Filter, Conditional Tags, das Einreihen von Skripten, Shortcodes, WP_Query, Escaping, REST API und WP-CLI die überwiegende Mehrheit der Routineaufgaben abdecken. Der Rest ist Übung und Dokumentation.
Für ein vertieftes Studium ist das Theme-Entwicklerhandbuch auf developer.wordpress.org die erste Adresse. Die Referenz der Template-Tags mit Hunderten von Funktionen für alle Gelegenheiten finden Sie ebenfalls dort. Wenn Sie von einem HTML-Layout zu einem fertigen Theme gelangen möchten, beginnen Sie mit der Schritt-für-Schritt-Anleitung zur Erstellung eines WordPress-Themes aus HTML, wo der Loop und Tags im praktischen Kontext erklärt werden, vom Layout zum funktionierenden Theme.
Setzen Sie ein Lesezeichen für diesen Spickzettel und halten Sie ihn während der Entwicklung griffbereit.
Welchen Tag oder Hook schlagen Sie am häufigsten nach? Schreiben Sie in die Kommentare, auf welche WordPress-Aufgabe Sie gestoßen sind, und teilen Sie Ihren Anwendungsfall, der Austausch von Praxiserfahrung ist ein Dutzend offizieller Leitfäden wert.



