Starter-Content für WordPress-Themes

Über die Starter-Content-Funktion können Themes seit WordPress 4.7 Inhalte mitliefern, die sich in eine frische Installation übernehmen lassen. So müssen Nutzer nicht komplett bei Null anfangen.

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',
         ],
      ],
   ],
] );

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 Seite about bekommt außerdem über die Angabe des Slugs der Template-Datei als template ein anderes Seiten-Template zugewiesen und das über attachment angelegte Bildobjekt als Beitragsbild. Um auf das Bild zu verweisen, müssen wir als Wert für post_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ür show_on_front den Wert page. Als Startseite soll die home-Seite zum Einsatz kommen, weshalb wir sie – wieder in geschweiften Klammern als Referenz – für page_on_front eintragen. Zur Anzeige der letzten Beiträge möchten wir die blog-Seite und setzen sie deshalb als Wert für page_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 und blog. Für die Seiten, die WordPress standardmäßig mitbringt, reicht hier ein Verweis über page_blog oder page_aboutlink_home führt immer zur Startseite. Um selbst erstellte Seiten zu verlinken, könnt ihr einen Eintrag nach dem folgenden Format unter items vornehmen (entnommen aus der get_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' ),
    ],

    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',
    ],

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',
   ],
] );

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.