Um den Einstieg in ein Theme und die manchmal vielen Optionen zu erleichtern, können Theme-Entwickler eine XML-Datei mit Demo-Daten bereitstellen, die von den Usern dann importiert werden können.
Neben dieser Möglichkeit gibt es seit WordPress 4.7 die »Starter Content«-Funktion, die gegenüber der XML-Variante ein paar Vorteile bietet:
- Es muss keine Datei importiert werden, weil die Starter-Inhalte direkt in das Theme integriert sind. Damit fällt ein – für einige potenziell schwieriger – Schritt weg.
- Die Anzeige der Starter-Inhalte geschieht im Customizer, wo vor der Übernahme noch Dinge angepasst werden können.
Es gibt allerdings (zurzeit) auch Nachteile:
- Aktuell funktionieren Starter-Inhalte nur bei frischen Installationen – für Installationen, die diesen Stand verlassen haben, müsste ein Wert in der Datenbank angepasst werden.
- Momentan gibt es ein Problem mit der Anzeige von Beiträgen, wodurch sich die Starter-Content-Funktion aktuell nur bedingt für Blog-Themes eignet.
Trotz dieser Nachteile ist dieses Feature eine spannende Neuerung aus 4.7, die definitiv einen Blick wert ist – schauen wir uns also ein Beispiel an.
Starter-Content-Funktion nutzen
Die Inhalte werden über einen add_theme_support()
-Aufruf in das Theme eingefügt – am besten einfach in der Funktion, die bereits andere Aufrufe von add_theme_support()
beinhaltet.
Der Core bringt bereits ein wenig Starter-Content mit. So gibt es die Seiten home
, about
, contact
, blog
, news
und homepage-section
, die aber einfach überschrieben werden können.
Folgende Felder können für Post-Objekte (Seiten und Beiträge) genutzt werden: post_type
, post_title
, post_excerpt
, post_name
(Slug), post_content
, menu_order
, comment_status
, thumbnail
(ID) und template
.
Beispiel mit Bild, Seiten, Menü und Optionen
Ein kleines Beispiel kann so aussehen:
// Create starter content for new sites.
add_theme_support( 'starter-content', [
// Add attachments that are used by posts and pages.
'attachments' =>; [
'featured-image-about-page' =>; [
'post_title' =>; 'Featured image for about page',
'file' =>; 'assets/images/starter-content/featured-image-about-page.jpg',
],
],
// Create and modify posts and pages.
'posts' =>; [
'home' =>; [
'post_content' =>; __( 'Welcome to your site! This is your homepage, which is what most visitors will see when they come to your site for the first time.
Here you could describe the features of the theme.', 'text-domain' ),
],
'about' =>; [
'template' =>; 'templates/about-page.php',
'thumbnail' =>; '{{featured-image-about-page}}',
'post_content' =>; __( 'Just introduce yourself!', 'text-domain' ),
],
'blog',
],
// Set options.
'options' =>; [
'show_on_front' =>; 'page',
'page_on_front' =>; '{{home}}',
'page_for_posts' =>; '{{blog}}',
'header_image' =>; get_theme_file_uri( 'assets/images/starter-content/featured-image-about-page.jpg' ),
],
// Fill nav menus.
'nav_menus' =>; [
'primary' =>; [
'name' =>; __( 'Primary Menu', 'text-domain' ),
'items' =>; [
'link_home',
'page_about',
'page_blog',
],
],
],
] );
Code-Sprache: PHP (php)
Wir erreichen mit dem Code folgendes:
- Erstellen eines Attachment-Objekts
featured-image-about-page
mit einem Titel und einer Verknüpfung zu einer Bilddatei aus unserem Theme. - Erstellen von drei Post-Objekten. Für
home
verändern wir lediglich den Seiteninhalt. Die Seiteabout
bekommt außerdem über die Angabe des Slugs der Template-Datei alstemplate
ein anderes Seiten-Template zugewiesen und das überattachment
angelegte Bildobjekt als Beitragsbild. Um auf das Bild zu verweisen, müssen wir als Wert fürpost_thumbnail
den Schlüssel des Bild-Arrays nutzen und innerhalb von zwei geschweiften Klammern angeben.blog
wird zur Anzeige der letzten Beiträge genutzt und braucht daher keinen Inhalt. - Festlegen einiger Site-Optionen über
options
. Wir möchten eine statische Startseite und setzen deshalb fürshow_on_front
den Wertpage
. Als Startseite soll diehome
-Seite zum Einsatz kommen, weshalb wir sie – wieder in geschweiften Klammern als Referenz – fürpage_on_front
eintragen. Zur Anzeige der letzten Beiträge möchten wir dieblog
-Seite und setzen sie deshalb als Wert fürpage_for_posts
. Darüber hinaus setzen wir ein Header-Bild und nehmen hier der Einfachheit halber dasselbe wie für die About-Seite. Diesmal muss allerdings der Pfad zu dem Bild angegeben werden. - Erstellen eines Menüs für die Menü-Position
primary
mit den Links zur Startseite,about
undblog
. Für die Seiten, die WordPress standardmäßig mitbringt, reicht hier ein Verweis überpage_blog
oderpage_about
–link_home
führt immer zur Startseite. Um selbst erstellte Seiten zu verlinken, könnt ihr einen Eintrag nach dem folgenden Format unteritems
vornehmen (entnommen aus derget_theme_starter_content()
-Funktion):
'page_about' =>; [
'type' =>; 'post_type',
'object' =>; 'page',
'object_id' =>; '{{about}}',
/*
* Setting a title is optional here.
* Without it, WordPress uses the page’s title.
*/
'title' =>; __( 'Link title', 'text-domain' ),
],
Code-Sprache: PHP (php)
Um auf eine bestimmte URL zu verlinken, geht ihr wie folgt vor (wieder an Code aus der Funktion angelehnt):
'link_facebook' => [
'title' => _x( 'Facebook', 'text-domain' ),
'url' => 'https://www.facebook.com/wordpress',
],
Code-Sprache: PHP (php)
Sidebars und Theme-Mods
Wir können mit Starter-Content aber zum Beispiel auch Sidebars bearbeiten und Werte für Customizer-Optionen setzen:
add_theme_support( 'starter-content', [
// Set widgets for the widget area with ID »sidebar-1«.
'widgets' => [
'sidebar-1' => [
'search',
'text_about',
],
],
// Set values for theme mods.
'theme_mods' => [
// Set »dark« for the »layout_mode« theme mod.
'layout_mode' => 'dark',
],
] );
Code-Sprache: PHP (php)
WordPress hat für den Starter-Content bereits standardmäßig Widgets definiert, die in den Widget-Bereichen angezeigt werden. Um das zu ändern, muss in widgets
selbst eine Liste mit Widgets für den oder die Widget-Bereiche festgelegt werden.
Dazu wird zunächst als Schlüssel die ID des Widget-Bereichs angegeben und als Array die Liste mit Widgets. Hier könnt ihr archives
, calendar
, categories
, meta
, recent-comments
, recent-posts
, search
und zwei Text-Widgets text_business_info
und text_about
angeben. Es ist auch möglich, eigene Widgets zu definieren.
Über theme_mods
können Werte für Customizer-Einstellungen gesetzt werden, die als Theme-Mod angelegt sind.
Weitergehende Informationen zum Thema Starter-Content findet ihr in dem Ankündigungsbeitrag auf make.wordpress.org. Alle Standardwerte, mit denen WordPress kommt, könnt ihr in der Funktion get_theme_starter_content()
finden – die Funktion ist auf jeden Fall einen Blick wert, um sich einen Überblick über die Möglichkeiten zu verschaffen.
Mentions