WordPress Themes erstellen: Die wichtigsten Funktionen im Überblick
Wer ein eigenes WordPress-Theme schreiben möchte, kommt nicht um typische WordPress-Funktionen herum. Diese Funktionen erlauben verschiedenste Inhalte auszugeben. Ideal also um das eigene Theme mit dynamischen durch WordPress bereits aufbereitete Inhalte zu erweitern. Wir geben einen Überblick welche in unseren Augen die wichtigsten Funktionen sind und welche Funktion was konkret in welchem Kontext für euch erledigt.
Essentielle Funktionen, die in jedes Theme gehören
Es gibt Funktionen, die sollten in jedem Theme integriert sein. Verzichtet man auf deren Einsatz, wird das Theme gar nicht erst korrekt funktionieren können.
wp_head() und wp_footer()
Während die Funktion wp_head() direkt über dem abschließenden </head> im Kopfbereich der Website platziert werden sollte, platziert man die Funktion wp_footer() meist direkt über den abschließenden </body>-Tag. Beide Funktionen binden wichtige WordPress-Scripts ein und geben Plugins die Möglichkeit ihre eigenen Scripts an genau jenen Stellen einzubinden. Verzichtet man also auf den Einsatz dieser beiden Funktionen, wird nicht nur WordPress Probleme bereiten. Auch externe Plugins werden ihren Dienst nicht aufnehmen können. Die schwarze Adminbar oben am Bildschirmrand erscheint übrigens gar nicht erst wenn man die wp_footer() nicht einbindet.
body_class()
Die Funktion body_class() ist zwar nicht zwingend notwendig, aber äußerst sinnvoll bis „quasi unerlässlich“. Sie wird in den Body-Tag eingebaut und sorgt dafür, dass WordPress vollautomatisch eigene Klassen dem Body-Tag hinzufügt. Jede Seite (ob Beitrag, Anhang, Seite oder sonstwas ist irrelevant) erhält eine individuelle Klassen-Sammlung. Damit wird es zum Kinderspiel via CSS ganz spezifisch auf die Eigenheiten der jeweiligen Einzelseiten einzugehen.
Ein Beispiel gefällig? So sieht aktuell der Body-Tag dieses Beitrages aus:
<body class="post-template-default single single-post postid-5723 single-format-standard logged-in admin-bar no-customize-support">
Konkret werden verschiedene Klassen hinzugefügt:
- Da es sich um das Standard-Template handelt, wird die Klasse post-template-default gesetzt
- Da es sich um die Detailansicht des Beitrages handelt, wird die Klasse single gesetzt
- Da es sich noch spezifischer um einen Beitrag („post“) handelt, wird zusätzlich die Klasse single-post gesetzt (damit kann man dann spezifischer via CSS einwirken)
- Da der Beitrag die ID 5723 hat, wird zudem die Klasse postid-5723 gesetzt
- WordPress erlaubt den Einsatz verschiedener so genannter „Post Formats“. In unserem Falle setzen wir auf den Standard-Post-Format, daher wird die Klasse single-format-standard hinzugefügt
- Da ich aktuell eingeloggt wird, wird zudem die Klasse logged-in hinzugefügt. Das wäre nicht der Fall, wenn ich ausgeloggt wäre (logisch)
- Die Klasse admin-bar wird gesetzt, da die Adminbar in der Tat auch eingeblendet wird
- Die Klasse no-customize-support setze WordPress, da unser Theme aktuell noch keine Customizer-Unterstützung bietet (bis dato haben wir auch keine Notwendigkeit darin gesehen)
Wie kann ich body_class() eigene Klassen hinzufügen?
Unter gewissen Umständen kann es interessant sein, body_class() entsprechend zu erweitern. Wir haben an anderer Stelle einen Blogartikel verfasst, wie man mit wenigen Zeilen Code body_class() erweitern kann.
Essentielle Loop-Funktionen: Must-Have für den WordPress-Loop
Der WordPress-Loop. An sich eine normale While-Schleife. Dennoch werden ungemein viele Informationen innerhalb des Loops verarbeitet, ausgewertet, aus der Datenbank „gekramt“ und auf dem Silbertablett aufgetischt. Wir nehmen die wichtigsten Loop-Funktionen unter die Lupe, die aus dem Theme-Entwickler-Alltag wohl kaum wegzudenken sind:
the_post()
Die Funktion the_post() fristet meist ein Schattendasein. Sie wird meist sehr unauffällig direkt nach Beginn der While-Schleife innerhalb des WordPress-Loops ausgeführt und anschließend nicht mehr beachtet.
<?php
while( have_posts() ): the_post();
endwhile;
?>
Die Aufgabe von the_post() ist es die Informationen passend zu jedem Beitrag oder jeder Seite (je nachdem welche Aufgabe der Loop gerade bewerkstelligen soll) auszulesen und zu verarbeiten. Nur dank dieser Funktionen können anschließend viele weitere Funktionen ihren Dienst verrichten. Die Funktion sorgt dafür, dass einerseits der Loop überhaupt korrekt funktionieren und „loopen“ kann und dass andererseits innerhalb dieser Funktion die so genannte „WP Query“ ausgeführt werden kann um alle Informationen zusammen zu tragen und innerhalb des Loops erreichbar zu machen. Alles in allem also unerlässlich.
"the_" und "get_the_" Funktionen
Innerhalb des WordPress-Loops stehen dem Theme-Entwickler zahlreiche Funktionen zur Verfügung um die frisch zusammengetragenen Inhalte auszugeben:
<?php
the_permalink(); // Gibt den Link zum Beitrags-Detail aus
the_title(); // Gibt den Titel des Beitrages aus
the_content(); // Gibt den Inhalt des Beitrages aus
the_excerpt(); // Gibt einen Anreisser des Beitrages aus
the_time(); // Gibt Uhrzeit und Datum des Beitrages aus
the_post_thumbnail(); // Gibt das Beitragsbild aus
the_category(); // Gibt die zugewiesenen Kategorien aus
the_tags(); // Gibt die zugewiesenen Tags aus
the_author(); // Gibt den Namen des Autoren aus
the_ID(); // Gibt die ID des aktuellen Beitrages aus
?>
Alle diese Funktionen geben unmittelbar („echo“) die Inhalte aus. Das ist natürlich nicht immer erwünscht. Oftmals möchte man die Informationen via PHP weiterverarbeiten und nicht „blind“ via echo ausgeben. In diesem Falle reicht es den Funktionen den Prefix get_ voranzustellen. Anschließend wird der Wert nicht mehr unmittelbar ausgegeben (sondern via „return“ weitergereicht) und kann damit in eine Variable „gepackt“ und weiterverarbeitet werden:
<?php
get_the_permalink(); // Gibt den Link zum Beitrags-Detail zurück.
get_the_title(); // Gibt den Titel des Beitrages zurück
get_the_content(); // Gibt den Inhalt des Beitrages zurück
get_the_excerpt(); // Gibt einen Anreisser des Beitrages zurück
get_the_time(); // Gibt Uhrzeit und Datum des Beitrages zurück
get_the_post_thumbnail(); // Gibt das Beitragsbild zurück
get_the_category(); // Gibt die zugewiesenen Kategorien zurück
get_the_tags(); // Gibt die zugewiesenen Tags zurück
get_the_author(); // Gibt den Namen des Autoren zurück
get_the_ID(); // Gibt die ID des aktuellen Beitrages zurück
?>
bloginfo() - Allgemeingültige Seiten-Infos ausgeben lassen
Die WordPress-Funktion bloginfo() liefert verschiedene allgemeingültige Informationen. Diese sind seitenübergreifend und gelten für die gesamte Website:
<?php
bloginfo('name'); // Gibt den unter Einstellungen > Allgemein > Seitentitel notierten Text aus
bloginfo('description'); // Gibt den unter Einstellungen > Allgemein > Untertitel notierten Text aus
bloginfo('url'); // Gibt den unter Einstellungen > Allgemein > Seiten-Adresse notierte URL aus
bloginfo('admin_email'); // Gibt die unter Einstellungen > Allgemein notierte E-Mail des Administrators aus
bloginfo('language'); // Gibt die unter Einstellungen > Allgemein gewählte Sprache von WordPress aus
?>
Template-Teile zusammentragen: Diese Funktionen fügen Inhalte zusammen
Niemand möchte kilometerlangen Code in einer einzelnen Datei unterhalten müsse. Besser ist es Teile eines Templates entsprechend auslagern zu können. Hier trumpft WordPress mit einigen spannenden Funktionen auf, die ebenfalls im Theme-Entwickler-Alltag nicht mehr wegzudenken sind.
get_header(), get_sidebar() und get_footer()
Diese beiden Funktionen werden entweder ganz oben – get_header() – oder ganz unten – get_footer() – innerhalb der Templates eingesetzt. Sie „ziehen“ den Inhalt der Dateien header.php und footer.php in das jeweilige Template. Praktisch: Allgemeingültige Informationen für den Header und den Footer lassen sich so geschickt auslagern und sauber abrufen. Analog funktioniert die Funktion get_sidebar(). Sie integriert die Inhalte der sidebar.php in das jeweilige Theme.
get_template_part() - Beliebige Template-Teile "includen"
Die Funktion get_template_part() ist sehr mächtig. Sie erlaubt es Teile des Theme-Codes auszulagern. Best-Practice – und auch eine Empfehlung des Theme-Review-Teams von WordPress – ist die Erstellung eines Ordners template-parts/ innerhalb des Themes. In diesen Ordner kann man dann die Einzelteile deponieren.
<?php get_template_part( 'template-parts/content','post' ); ?>
In diesem Beispiel versucht WordPress zuerst die angesteuerte Datei content-post.php im Ordner /template-parts/ auszuführen. Der Clou an get_template_part()? Wird die Datei content-post.php nicht gefunden, wird als Fallback automatisch die Datei content.php geladen. So kann man ohne großen Aufwand Fallback-Template-Teile ansteuern. Die Funktion kann sogar dynamisiert werden – und wird damit noch mächtiger:
<?php get_template_part( 'template-parts/navigation', get_post_type() ); ?>
Mit dieser Funktion kann man nun eine Fallback-Datei navigation.php in template-parts/ erstellen und für jeden Post-Type eine spezifischere Template-Datei erstellen: navigation-page.php, navigation-post.php usw.
Überprüfen dank Conditional Tags
WordPress besitzt zahlreiche so genannte Conditional Tags. Diese erlauben Überprüfungen vorzunehmen. Entsprechend werden Sie also innerhalb von If-Anweisungen eingesetzt. Diese Funktionen sind ebenfalls nicht wegzudenken. Sie erlauben es Programm-Teile nur unter gewissen Bedingungen ausführen zu lassen:
<?php
if( is_front_page() ):
echo 'Dieser Text wird nur auf der Startseite ausgegeben';
endif;
if( is_page() ):
echo 'Dieser Text wird nur ausgegeben wenn der Beitrags-Typ eine Seite ist und kein Beitrag';
endif;
if( is_page(3) ):
echo 'Dieser Text wird nur auf der Seite mit der ID 3 ausgebenen';
endif;
if( is_page('kontakt') ):
echo 'Dieser Text wird nur auf der Seite mit dem Namen Kontakt ausgegeben';
endif;
if( is_single() ):
echo 'Dieser Text wird nur in der Detailansicht eines Beitrages ausgegeben';
endif;
if( is_single(17) ):
echo 'Dieser Text wird nur auf der Detailseite des Beitrages mit der ID 17 ausgegeben';
endif;
if( is_admin() ):
echo 'Diesen Text kriegen nur Benutzer zu Gesicht, die als Administratoren eingeloggt sind';
endif;
if( is_logged_in() ):
echo 'Dieser Text wird nur für eingeloggte Nutzer angezeigt';
endif;
if( has_post_thumbnail() ):
echo 'Dieser Text wird nur ausgegeben wenn der Beitrag ein Beitragsbild hat';
endif;
if( is_category() ):
echo 'Dieser Text wird nur in der Archiv-Ansicht einer Kategorie angezeigt';
endif;
if( is_category(2) ):
echo 'Dieser Text wird nur in der Archiv-Ansicht der Kategorie mit ID 2 angezeigt';
endif;
if( is_category('allgemein') ):
echo 'Dieser Text wird nur in der Archiv-Ansicht der Kategorie Allgemein angezeigt';
endif;
if( is_tag() ):
echo 'Dieser Text wird nur in der Archiv-Ansicht eines Tags angezeigt';
endif;
if( comments_open() ):
echo 'Dieser Text wird nur angezeigt wenn für diesen Beitrag die Kommentarfunktion aktiviert ist';
endif;
?>
Escaping und Spamschutz
WordPress hält verschiedene Funktionen bereit um Inhalte zu bereinigen, ehe sie via Browser ausgegeben werden. Im Fachjargon nennt sich das „Escaping“ und bereinigt die möglicherweise „böse“ formatierten Daten.
<?php
esc_url(); // Bereinigt ("Sanitized") URLs. Auch Anführungszeichen werden sauber umgewandelt
esc_html(); // Bereinigt HTML-Ausgaben. Auch Anführungszeichen werden sauber umgewandelt.
esc_attr(); // Bereinigt HTML-Attribute
?>
Sogar eine Antispam-Funktion hält WordPress bereit. Über die Funktion antispambot() werden nicht sonderlich clevere Bots ausgetrichst. Diese Funktion „verschlüsselt“ E-Mail-Adressen als „HTML-Entities“, so dass sie im Quellcode unlesbar werden. Browser wissen das zu interpretieren und korrekt darzustellen. Der Besucher bemerkt nichts davon, die (oftmals dämlichen) Spam-Bots können mit den kryptischen Zeichen im Quellcode nichts anfangen.
<?php
antispambot('meinemail@mail.de'); // Verschlüsselt E-Mail-Adressen als "HTML-Entities" vor der Ausgabe um diese simpel vor Spambots zu schützen
?>
add_theme_options() - Spezielle Theme-Funktionen aktivieren
Die Funktion add_theme_options() wird innerhalb der Datei functions.php ausgeführt und erlaubt die Aktivierung verschiedener Extra-Funktionen:
<?php
add_theme_support( 'post-thumbnails' );
// Aktiviert Beitragsbilder im Theme für alle Posts
add_theme_support( 'post-thumbnails', array( 'post', 'movie' ) );
// Aktiviert diese nur für Beiträge und Custom Post Type "movie"
add_theme_support( 'custom-background' );
// Individuelles Hintergrund-Bild (anpassbar via Theme-Customizer)
add_theme_support( 'custom-header' );
// Individuelles Kopfbild (anpassbar via Theme-Customizer)
add_theme_support( 'custom-logo' );
// Individuelles Logo (anpassbar via Theme-Customizer)
add_theme_support( 'title-tag' );
// Erlaubt Plugins den Title-Tag zu beeeinflussen (z.B. Yoast)
Diverse interessante Ausgabe-Funktionen
WordPress hat noch zig andere sehr interessante Funktionen. Diese hier aufzulisten würde den Rahmen sprengen. An dieser Stelle allerdings eine kleine Auflistung einiger weiterer interessanter Funktionen:
<?php
wp_get_archives();
// Gibt eine chronologische Archiv-Liste aus
posts_nav_link();
// Gibt in einem Beitrag "Vor und Zurück" Links aus
next_post_link();
// Gibt den Link zum chronologisch nächstälteren Beitrag aus
previous_post_link();
// Gibt den Link zum chronologisch nächstjüngeren Beitrag aus
wp_register();
// Gibt den Link zur Seiten-Registrierung aus
wp_loginout();
// Gibt die Login-Logout-Links aus
language_attributes();
// Gibt sprachspezifische Angaben z.B. lang="de" aus - wird in <html> eingesetzt
get_comments_number();
// Gibt die Anzahl Kommentare zurück (innerhalb des Loops)
?>
Fazit und weitere Links
WordPress ist ein Funktions-Paradies. Für etliche Ausgaben stehen bereits praktische Funktionen zur Verfügung. Deren Einsatz ist „futere proof“, oftmals unkompliziert und selbst für Einsteiger leicht verständlich. Es lohnt sich als Theme-Entwickler zumindest einen groben Überblick zu haben über die Vielfalt an Möglichkeit. Selbst wenn sich die ein oder andere Funktion noch nicht erschließen sollte: Wenn man sie mal benötigt, weiß man, dass es sie gibt.
Weitere Links um Thema:
- Liste aller Conditional Tags: https://developer.wordpress.org/themes/basics/conditional-tags/
- https://developer.wordpress.org/themes/references/list-of-template-tags/ Liste aller Template Tags:
- Theme Developer Handbook von WordPress: https://developer.wordpress.org/themes/getting-started/
- https://codex.wordpress.org/Theme_Unit_Test Theme Unit Test Content (zum Testen des Themes mit „realen“ Inhalten):
[…] Pixelbar […]
[…] Pixelbar […]
[…] Artikel bei Pixelbar zu WordPress Themes erstellen. Die wichtigsten Funktionen im Überblick […]
… [Trackback]
[…] Informations on that Topic: pixelbar.be/blog/wordpress-themes-erstellen-die-wichtigsten-funktionen-im-ueberblick/ […]