WordPress: vom Einstieg bis zur Entwicklung · Modul 4: Plugin-Entwicklung

Lektion 3 von 8Übung 16 Min.

Eigene Inhaltstypen und Metadaten

Lernziele
  • eigene Inhaltstypen und Taxonomien registrieren
  • zwischen Inhaltstyp, Taxonomie und Metafeld entscheiden
  • Metadaten mit register_post_meta typisiert und abgesichert anlegen
  • Metadaten im Block-Editor und in der REST API verfügbar machen

Beiträge und Seiten reichen für einen Blog, aber kaum für eine Unternehmenswebsite. Ein Fahrradladen hat Modelle und Werkstatttermine, eine Zahnarztpraxis Behandlungen und Teammitglieder, ein Hotel Zimmer und Arrangements. Mit eigenen Inhaltstypen bekommen solche Inhalte ihren eigenen Bereich im Backend, eigene Adressen und Vorlagen. Metadaten speichern die zugehörigen Eigenschaften wie Preis, Dauer oder Zimmergröße. In Modul 1 ging es darum, Inhalte zu modellieren – jetzt setzen Sie das Modell in Code um.

1. Inhaltstypen registrieren

Definition 3.1
Custom Post Type
Ein eigener Inhaltstyp, der wie Beiträge in der Tabelle wp_posts gespeichert wird, aber eigene Menüpunkte, Adressen, Vorlagen und Einstellungen hat. Registriert wird er bei jedem Aufruf auf dem Hook init.

Der Name eines Inhaltstyps sollte ein Präfix tragen und darf höchstens 20 Zeichen lang sein. Die wichtigsten Einstellungen bestimmen, ob der Typ öffentlich ist, ob er im Block-Editor und in der REST API erscheint und ob es eine Archivseite gibt. Probieren Sie die Kombinationen aus:

Generatorregister_post_type zum Ausprobieren
includes/Inhaltstypen.php
1<?php
2register_post_type( 'radwerk_termin', [
3 'labels' => [ 'name' => 'Termine', 'singular_name' => 'Termin' ],
4 'public' => true,
5 'show_in_rest' => true,
6 'has_archive' => 'termine',
7 'hierarchical' => false,
8 'supports' => [ 'title', 'editor', 'thumbnail', 'custom-fields' ],
9 'menu_icon' => 'dashicons-calendar-alt',
10 'rewrite' => [ 'slug' => 'termin' ],
11] );
Öffentlich mit Archiv: /termine/ listet alle Termine, jeder Termin hat eine eigene Adresse.

Nach dem Registrieren eines Inhaltstyps mit eigenen Adressen müssen die Permalinks einmal neu erzeugt werden – sonst liefern die neuen Seiten 404-Fehler. Das geschieht mit flush_rewrite_rules() im Aktivierungshook, niemals bei jedem Aufruf, denn das ist sehr langsam.

2. Inhaltstyp, Taxonomie oder Metafeld?

Die häufigste Designfrage bei Plugins ist die Wahl der richtigen Struktur. Eine Taxonomie gruppiert viele Inhalte und erzeugt Archive; ein Metafeld speichert eine einzelne Eigenschaft; ein Inhaltstyp steht für eigenständige Einträge. Üben Sie die Entscheidung:

ÜbungWelche Struktur passt?
  1. Fahrradmodelle mit eigener Seite und eigenem Archiv

  2. Kategorie eines Modells: Citybike, E-Bike, Rennrad

  3. Rahmenhöhe eines Modells in Zentimetern

  4. Marken, nach denen Kunden im Shop filtern

  5. Preis eines Modells

0 von 5 eingeschätzt

Eine Faustregel hilft: Will man nach etwas filtern oder eine Übersichtsseite dafür haben, ist es eine Taxonomie. Taxonomie-Abfragen sind zudem deutlich schneller als Abfragen nach Metawerten, weil sie über eigene, indizierte Tabellen laufen.

3. Metadaten sauber registrieren

Metadaten lassen sich ohne Registrierung speichern, aber registrierte Metadaten haben große Vorteile: Sie sind typisiert, haben einen Standardwert, werden beim Speichern automatisch bereinigt, sind nur mit passenden Rechten änderbar und erscheinen auf Wunsch in der REST API. Nur so können sie im Block-Editor genutzt und über die Block Bindings API direkt in Blöcken angezeigt werden.

DurchlaufEin Metafeld registrieren
includes/Inhaltstypen.php
1<?php
2register_post_meta( 'radwerk_termin', 'dauer_minuten', [
3 'type' => 'integer',
4 'single' => true,
5 'default' => 60,
6 'show_in_rest' => true,
7 'sanitize_callback' => 'absint',
8 'auth_callback' => fn() => current_user_can( 'edit_posts' ),
9] );
10
11$dauer = get_post_meta( $termin_id, 'dauer_minuten', true );
12update_post_meta( $termin_id, 'dauer_minuten', 90 );

Variablen

Ausgabe

 
Schritt 1/6: Das Feld dauer_minuten gehört zum Inhaltstyp radwerk_termin.
Registrieren Sie Inhaltstypen mit Präfix und show_in_rest, Metafelder mit register_post_meta. Taxonomien für alles, wonach gefiltert wird, Metafelder für Eigenschaften.

4. Metadaten im Editor bearbeiten

Für die Eingabe gibt es drei Wege. Erstens Blöcke mit Block Bindings, die ein Metafeld direkt anzeigen und bearbeitbar machen. Zweitens eine eigene Seitenleiste im Editor, die mit wenigen Zeilen JavaScript Eingabefelder für registrierte Metafelder bereitstellt. Drittens Feld-Plugins wie Advanced Custom Fields oder Meta Box, die Felder per Oberfläche anlegen – praktisch, aber eine zusätzliche Abhängigkeit. Für wenige, stabile Felder ist eigener Code meist die schlankere Lösung; für Websites, deren Felder sich häufig ändern, kann ein Feld-Plugin sinnvoll sein.

ErkundenWo Inhalte gespeichert werden
wp_postswp_postmetawp_terms & Co.
wp_posts: Alle Inhaltstypen: Beiträge, Seiten, Termine, Modelle – mit Titel, Inhalt, Status, Datum. (1/3 erkundet)

Ein Beispiel

Eine Zahnarztpraxis wollte ihre Behandlungen übersichtlich darstellen: je eine Seite mit Beschreibung, Ablauf, Dauer und Hinweisen zur Kostenübernahme, dazu eine Übersicht nach Bereichen wie Prophylaxe, Zahnerhaltung und Zahnersatz. Umgesetzt wurde das mit einem Inhaltstyp „Behandlung“ mit Archiv, einer Taxonomie „Bereich“ und drei registrierten Metafeldern für Dauer, Anzahl der Termine und einen Hinweis zur Krankenkasse. Die Vorlage single-behandlung.html zeigt die Metafelder über Block Bindings in einem Infokasten an. Das Praxisteam pflegt neue Behandlungen seitdem ohne Hilfe, und weil die Daten strukturiert vorliegen, konnte später ohne Mehraufwand eine Vergleichstabelle und eine Schnittstelle für die Online-Terminbuchung ergänzt werden.

Bemerkenswert ist, was bewusst nicht gebaut wurde: kein Feld für den Preis, weil Kosten individuell sind, und keine eigene Tabelle, weil es nur rund vierzig Behandlungen gibt. Gute Datenmodelle sind so einfach wie möglich und so strukturiert wie nötig.

5. Häufige Fragen

Warum sehe ich nach dem Registrieren nur 404-Fehler? Die Permalink-Regeln wurden nicht neu erzeugt. Einmal unter Einstellungen → Permalinks speichern oder im Aktivierungshook flush_rewrite_rules() aufrufen.

Kann ich einen Inhaltstyp später umbenennen? Nur mit Aufwand, denn der Name steht in jeder Zeile der Datenbank. Wählen Sie ihn daher von Anfang an sorgfältig. Die sichtbare Bezeichnung und die Adresse (rewrite slug) lassen sich dagegen jederzeit ändern.

Was passiert mit den Inhalten, wenn das Plugin deaktiviert wird? Sie bleiben in der Datenbank, sind aber nicht mehr sichtbar. Nach dem erneuten Aktivieren sind sie wieder da – ein weiterer Grund, Inhaltstypen in ein Plugin statt ins Theme zu legen.

6. Übung zum Selbermachen

Registrieren Sie in Ihrem Übungsplugin einen Inhaltstyp „Modell“ mit Archiv unter /fahrraeder/, eine Taxonomie „Kategorie“ und zwei Metafelder: preis (number) und rahmenhoehe (integer). Legen Sie drei Modelle an und rufen Sie /wp-json/wp/v2/ mit dem Namen Ihres Typs im Browser auf: Erscheinen die Metafelder in der Antwort? Wenn nicht, prüfen Sie show_in_rest und ob der Inhaltstyp custom-fields unterstützt.

Quellen und weiterführende Literatur
  1. [1]WordPress.org (2026): Plugin Handbook – Post Types, Taxonomies, Metadata.
  2. [2]WordPress.org (2026): Code Reference – register_post_type(), register_taxonomy(), register_post_meta().
  3. [3]WordPress.org (2026): Block Bindings API – Block Editor Handbook.

Stand: September 2026, WordPress 7.1, PHP 8.3. Kursmaterial der Klarwerk Akademie. WordPress entwickelt sich schnell – maßgeblich ist die aktuelle Dokumentation auf developer.wordpress.org.

Abschlussquiz

Drei Fragen – dann ist die Lektion geschafft.

Frage 1 von 3

Auf welchem Hook registriert man Inhaltstypen?