Websupporter

Vor allem über WordPress.

Starter Content für Themes

Kennt Ihr das auch? Ihr sucht nach einem neuen Theme und flaniert durch verschiedene Showcases, schaut Euch Livedemos und Vorschaubilder an, die Euch das Theme auf verschiedenen Auflösungsstufen, für Desktop, Tablet und Mobile zeigen. Dann habt Ihr Euch endlich entschieden, ladet das Theme herunter, haut es auf Eure frische WordPress Installation und irgendwie sieht nichts so aus, wie erwartet?

Jetzt beginnt ein ewiges Herumfrickeln, bis über den Customizer oder gar die Theme Optionen die Einstellungen so getroffen sind, dass alles passt. Neue Seiten müssen angelegt werden, um die entsprechenen Page Templates zu testen und Widgets müssen konfiguriert werden. Je nachdem wie umständlich das Ganze wird verfliegt da schnell das anfängliche Hochgefühl, endlich das Theme gefunden zu haben und Frust stellt sich ein.

Manche Themeentwickler⋅innen legen ihren Meisterwerken deshalb Dummydaten bei, welche über den WordPress Importer auf die nagelneue WordPress Installation geladen werden können und so zumindest ein wenig Arbeit abnehmen. Das war zumindest immer eine nette Geste, aber bis WordPress 4.7 fehlte einfach ein ordentlicher Workflow für dieses Problem. Doch jetzt gibt es ein neues Feature, das zwischen all dem Jubel um PDF-Vorschaubilder, REST-API, Shortcuts und ich weiß nicht was, ein bißchen untergegangen ist: Starter Content. STARTER CONTENT! 🎉

Wenn Ihr mit einer frischen WordPress Installation in den Customizer geht, um Twentyseventeen zu konfigurieren, dann werdet Ihr nicht einfach einen leeren Blog mit einem „Hallo Welt“-Beitrag vorfinden. Vielmehr findet Ihr eine vollständig konfigurierte WordPress Installation vor. Es gibt ein Menü, eine Frontpage, eine About-Seite, einen Blog und eine Kontaktseite. Die Sidebar ist schon komplett konfiguriert und es gibt ein „Find us“-Textwidget, die Suche und ein Widget „About this site“. Sogar das Hauptmenü und das Socialmenü im Footer sind schon konfiguriert.

2017 Starter Content im Customizer
2017 Starter Content im Customizer

Ein⋅e Anwender⋅in kann nun einfach durch den Customizer spazieren gehen, die Widgets anpassen, raushauen, ersetzen, die Menüs abändern und schließlich mit „Speichern“ die Einstellungen speichern. Der Theme-Installations-Workflow ist also komplett in den Customizer integriert.

Bisher funktioniert dies allerdings nur mit frischen Installationen, auf denen noch keine Seiten, Beiträge, Widgets oder sonstige Inhalte angelegt wurden. Es gibt allerdings schon Planungen, wie das Konzept am Besten auf alte Seiten übertragen werden kann.

Wie bereite ich „Starter Content“ für mein Theme auf?

Der ganze Zaubertrick hängt nun natürlich an den Entwickler⋅innen von WordPress Themes. Sie müssen den Starter Content bereitstellen und die Konfiguration übernehmen. Dieser Beitrag gibt eine Übersicht, wie das zu bewerkstelligen ist.

Alles spielt sich dabei in der Aktion after_setup_theme ab. Hier kann die Unterstützung von starter-content mit Hilfe von add_theme_support() deklariert werden. Das Interessante ist nun der Konfigurationsarray, welcher mit dieser Deklaration übergeben wird.

Wir können Widgets, Posts, Attachments, Navigations-Menüs, Optionen und Theme-Mods in diesem Array übergeben. Wenden wir uns den einzelnen Möglichkeiten nach und nach zu:

Widgets

WordPress liefert schon eine ganze Reihe vorkonfigurierter Widgets mit. Sagen wir, in unserem Theme gibt es eine Sidebar mit der ID sidebar-1 und wir wollen in dieser das Suchwidget und ein Textwidget mit Öffnungszeiten darstellen, so können wir das wie folgt erreichen:

Embed from gist.github.com

Click the button below to load the content from gist.github.com.

Im widgets-Bereich unseres Konfigurationsarrays sagen wir also: In der sidebar-1 sollen diese beiden Widgets auftauchen. Dies sind die vorformatierten Widgets, welche der WordPress Core bereitstellt:

  • text_business_info
  • text_about
  • archives
  • calendar
  • categories
  • meta
  • recent-comments
  • recent-posts
  • search

Sagen wir aber, Du möchtest einen individuellen Text in ein Textwidget einpflegen, wie würde das gehen? Statt einem einfachen Textstring übergeben wir nun einen Array. Das erste Element des Arrays enthält den Widget-Identifikator (die sogenannte id_base), hier text, der zweite Array enthält alle Informationen, welche das Widget über die $instance zum Rendern des Widgets benötigt:

Embed from gist.github.com

Click the button below to load the content from gist.github.com.

Dies funktioniert dann natürlich nicht nur mit den schon im WordPress Core vorhandenen Widgets wie dem Archiv oder ähnlichen, sondern auch mit Widgets, welche über Plugins oder (eventuell) über das Theme bereitgestellt werden. Sehen wir uns dazu folgendes Beispiel an:

Embed from gist.github.com

Click the button below to load the content from gist.github.com.

Wir registrieren hier zunächst unser Widget Mein_Widget() mit der Base ID meine-base-id. Und in der Methode widget() lassen wir uns im Wesentlichen einfach die $instance ausgeben. Schließlich weisen wir in unserer Content-Starter-Deklaration noch die Inhalte diesem Widget zu und schon wird dieses Widget mit den Inhalten angezeigt.

Posts

Um Beiträge, Seiten oder andere Inhalte für die Vorschau zu erstellen, könnt Ihr wie folgt vorgehen:

Embed from gist.github.com

Click the button below to load the content from gist.github.com.

Wir legen hier eine Seite mit dem Identifikator test an. Wir weisen diesem Inhalt den Posttype page zu, einen Titel und einen Inhalt. Dieser Array wird schließlich als Übergabeparameter an wp_insert_post() genutzt, da diese Starter-Beiträge mit dem Status auto-draft in der Datenbank hinterlegt werden. So können natürlich auch benutzerdefinierte Felder mit übergeben werden, indem der Array um ein meta_input erweitert wird. Wenn Du einer Seite ein bestimmtes Seitentemplate zuweisen möchtest, kannst Du dies so tun:

'template' => 'sample-page-template.php'

Der WordPress Customizer liefert allerdings auch schon vorgefertigte Seiten, wie das folgende Listing darstellt:

Embed from gist.github.com

Click the button below to load the content from gist.github.com.

Mit diesen sechs vorgefertigten Seiten erspart sich der/die Entwickler⋅in dann einiges an Konfigurationsarbeit.

Attachments

Attachments sind formal gesehen natürlich nichts anderes als ein besonderer Posttype. Allerdings gibt es bei Anhängen noch Dateien, welche mit bedacht werden müssen und diese machen es notwendig, Attachments separat zu konfigurieren. Dann sind sie allerdings eine wirklich interessante Angelegenheit:

Embed from gist.github.com

Click the button below to load the content from gist.github.com.

Hier registrieren wir zunächst das Attachment featured-image-logo. Dieses steht uns dann zur Verfügung, um es beispielsweise mit Hilfe von {{featured-image-logo}} an einen Beitrag als benutzerdefiniertes Bild anzuhängen.

Unser besonderes Interesse gilt in diesem Listing natürlich dem file-Wert. Verknüpfte Mediendateien müssen im Theme selbst zu finden sein. Der Pfad zur Mediendatei kann entweder absolut oder aber relativ zum Theme-Verzeichnis angegeben werden. Im hier skizzierten Fall läge die Datei also hier:

http://example.com/wp-content/themes/theme-slug/assets/images/featured-logo.jpg

Dem ein oder anderem mag aufgefallen sein, dass wir den „About“-Beitrag, der ja ein WordPress Standard-Eintrag ist, hier mit einem Array registrieren. Wir können sämtliche Standard-Einträge nehmen und die Eigenschaften dieser Beiträge mit Hilfe solcher Arrays erweitern.

Die Navigation

Kommen wir zur Navigation. Sehen wir uns zunächst kurz das Listing an:

Embed from gist.github.com

Click the button below to load the content from gist.github.com.

Wir erstellen zwei Seiten und machen uns dann daran, unser Menü zu konstruieren. In nav_menus bezeichnen die Array-Keys (hier beispielsweise top) die Menülocation, welche wir zuvor in unserem Theme registriert haben müssen. Mit name übergeben wir den Namen des Menüs und in items schließlich die einzelnen Menüitems. Das erste Item, welches wir übergeben ist page_home, ein WordPress Standard, welcher auf die Standardseite home verweist, welche wir oben registriert haben. Danach haben wir ein Array. Grundsätzlich gibt es zwei Navigationsitem-Typen, welche wir anlegen können: Objekte und Links. Objekte verweisen auf ein registriertes Objekt, in unserem Fall auf die Testseite, welche wir zunächst angelegt haben und dann über object_id mit {{test}} referenzieren. Auch object und type müssen dabei angegeben werden.

Darunter registrieren wir dann einen externen Link als Menüitem. Hierfür muss einfach eine URL in url und ein Titel in title übergeben werden.

Optionen und Theme Mods

Um Optionen oder Theme Mods anzulegen, wird options beziehungsweise theme_mods bereitgestellt. Diese Bereiche sind Schlüssel-Wert-basiert, wie das folgende Listing zeigt:

Embed from gist.github.com

Click the button below to load the content from gist.github.com.

Hier sagen wir, dass wir auf der Startseite eine einzelne Seite anzeigen lassen wollen, und zwar die von uns angelegte home und dass wir als Blogseite unsere test-Seite verwenden wollen. Außerdem hinterlegen wir in den Theme Mods hinter dem Schlüssel color den (Farb-)Wert #f00.

Die Konfiguration filtern

Der Filter get_theme_starter_content kann diese Konfiguration dann noch einmal filtern. Dies ist vor allem dann nützlich, wenn ein Plugin sich einhaken möchte, um sein eigenes Widget in der einer Sidebar gleich mit zu präsentieren.

Schluss

So, ich hoffe, dieser kleine Überblick über das „Starter-Content“-Feature in WordPress 4.7 konnte Euch ein wenig weiterhelfen. Dieses Feature ist natürlich vor allem für Themeentwickler⋅innen interessant, welche ihre Themes einem größeren Publikum zur Verfügung stellen möchten. Es ermöglicht Euren Benutzer⋅innen einen möglichst schnellen und schmerzlosen Start mit dem von Euch entwickelten Theme.

Was hälst Du vom neuen „Starter-Content“-Feature? Hast Du es schon einmal eingesetzt oder ist es Dir als Anwender⋅in schon einmal aufgefallen?

Über den Autoren

Seine erste Webseite hat David Remer 1998 in HTML verfasst. Wenig später war er fasziniert von DHTML und JavaScript. Nach jahrelanger Freelancerei arbeitete er zunächst für Inpsyde und ist heute Entwickler bei Automattic. Außerdem hat er das Buch "WordPress für Entwickler" verfasst.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.