Custom Post Types — eigene Inhaltstypen in WordPress.
Referenzen als normale Beiträge, Stellenanzeigen als Seiten, Immobilien in einem Page-Builder-Raster, das bei jeder Änderung auseinanderfällt? Mit eigenen Inhaltstypen bekommt jede Art von Inhalt ihre eigene Struktur — sauber pflegbar, filterbar und für Google verständlich.
Ein Custom Post Type ist ein eigener Inhaltstyp in WordPress neben Beiträgen und Seiten — etwa „Projekte“, „Immobilien“, „Stellenanzeigen“ oder „Kurse“. Er bekommt einen eigenen Menüpunkt im Backend, eigene Felder für strukturierte Angaben, eigene Taxonomien zum Kategorisieren und eigene Vorlagen im Frontend. Registriert wird er per Code, idealerweise in einem Plugin.
Wann eigene Inhaltstypen sinnvoll sind.
Die Faustregel: Wenn du viele Einträge derselben Art hast, die alle die gleichen Angaben haben, ist das ein eigener Inhaltstyp.
| Inhalt | Typische Felder | Typische Taxonomien |
|---|---|---|
| Projekte / Referenzen | Kunde, Ort, Jahr, Leistungen, Galerie | Branche, Leistung |
| Immobilien | Preis, Fläche, Zimmer, Baujahr, Status | Objektart, Ort |
| Stellenanzeigen | Arbeitszeit, Standort, Eintritt, Ansprechpartner | Bereich, Anstellungsart |
| Kurse / Lektionen | Dauer, Niveau, Audio, Reihenfolge | Kurs, Thema |
| Team | Position, Kontakt, Foto | Abteilung, Standort |
| Veranstaltungen | Datum, Uhrzeit, Ort, Preis, Anmeldung | Veranstaltungsart |
| Produkte ohne Shop | Technische Daten, Datenblatt, Varianten | Produktfamilie |
Nicht sinnvoll ist ein eigener Inhaltstyp für einzelne Seiten mit individuellem Aufbau oder für Inhalte, die sich mit normalen Beiträgen und Kategorien gut abbilden lassen.
Die drei Bausteine.
- Der Inhaltstyp selbst — zum Beispiel „Projekt“, mit Titel, Text, Beitragsbild und eigener Adresse wie
/projekte/badsanierung-bramsche/. - Metafelder — strukturierte Angaben wie Ort, Jahr oder Preis, die gefiltert und einheitlich dargestellt werden können.
- Taxonomien — eigene Kategorien oder Schlagwörter wie „Branche“ oder „Leistung“, mit eigenen Übersichtsseiten.
Custom Post Type registrieren.
<?php
/**
* Plugin Name: Projekte
* Description: Eigener Inhaltstyp für Referenzprojekte.
*/
add_action( 'init', function () {
register_post_type( 'projekt', [
'labels' => [
'name' => 'Projekte',
'singular_name' => 'Projekt',
'add_new_item' => 'Neues Projekt anlegen',
],
'public' => true,
'has_archive' => true, // Übersicht unter /projekte/
'rewrite' => [ 'slug' => 'projekte' ],
'menu_icon' => 'dashicons-portfolio',
'supports' => [ 'title', 'editor', 'thumbnail', 'excerpt' ],
'show_in_rest' => true, // Block-Editor und REST-API
] );
register_taxonomy( 'leistung', 'projekt', [
'labels' => [ 'name' => 'Leistungen', 'singular_name' => 'Leistung' ],
'hierarchical' => true, // wie Kategorien
'rewrite' => [ 'slug' => 'leistung' ],
'show_in_rest' => true,
] );
foreach ( [ 'ort' => 'string', 'jahr' => 'integer' ] as $feld => $typ ) {
register_post_meta( 'projekt', $feld, [
'type' => $typ,
'single' => true,
'show_in_rest' => true,
'auth_callback' => fn() => current_user_can( 'edit_posts' ),
] );
}
} );
// Nach Aktivierung Permalinks einmalig neu schreiben, damit /projekte/ erreichbar ist
register_activation_hook( __FILE__, function () {
do_action( 'init' );
flush_rewrite_rules();
} );register_post_meta stellt die Felder für den Block-Editor und die REST-API bereit, bringt aber noch keine Eingabemaske mit. Die entsteht über eine eigene Box im Editor, einen Block oder ein Feld-Plugin.
Felder und Taxonomien.
Eingabemasken für Felder
Für die Redaktion braucht jedes Feld eine verständliche Eingabe. Drei gängige Wege:
- Feld-Plugins wie Advanced Custom Fields oder Meta Box — schnell eingerichtet, sehr verbreitet, für die meisten Projekte eine gute Wahl.
- Eigene Metaboxen oder Seitenleisten-Einstellungen im Block-Editor — ohne zusätzliches Plugin, mehr Entwicklungsaufwand.
- Block-Bindungen: Neuere WordPress-Versionen können Blöcke direkt mit Metafeldern verbinden, sodass Felder im Layout erscheinen.
Taxonomie oder Feld?
Soll es eine eigene Übersichtsseite geben, nach der Besucher filtern — etwa „alle Projekte zur Badsanierung“ —, ist es eine Taxonomie. Ist es eine individuelle Angabe pro Eintrag — etwa das Baujahr —, ist es ein Feld.
Plugin oder Theme?
Custom Post Types gehören in ein Plugin, nicht in die functions.php des Themes. Der Grund: Die Inhalte sind Daten, das Theme ist Darstellung. Wird das Theme gewechselt, bleiben die Einträge zwar in der Datenbank, verschwinden aber aus dem Backend und von der Website, wenn die Registrierung im Theme stand. In einem Plugin überleben sie jeden Theme-Wechsel.
Die Vorlagen für die Darstellung — Einzelansicht und Übersicht — dürfen dagegen im Theme liegen: bei Block-Themes als Vorlagen im Website-Editor, bei klassischen Themes als single-projekt.php und archive-projekt.php.
SEO und strukturierte Daten.
- Sprechende Adressen:
/projekte/badsanierung-bramsche/statt/?p=123. - Übersichtsseiten mit Text: Das Archiv und jede Taxonomie-Seite bekommen eine Einleitung, statt nur eine Liste zu sein.
- Keine dünnen Seiten: Einträge mit nur einem Satz besser nicht indexieren oder mit Inhalt füllen.
- Strukturierte Daten passend zum Typ — etwa für Stellenanzeigen, Veranstaltungen oder Kurse, die Google gesondert darstellen kann.
- Interne Verlinkung: Leistungsseiten zeigen passende Projekte, Projekte verlinken zur Leistung.
- Sitemap: Den neuen Inhaltstyp in die XML-Sitemap aufnehmen — die meisten SEO-Plugins erkennen ihn automatisch.
Typische Fehler.
| Fehler | Folge | Lösung |
|---|---|---|
| Registrierung in der functions.php | Inhalte weg nach Theme-Wechsel | In ein Plugin verschieben |
| Permalinks nicht neu geschrieben | 404-Fehler auf neuen Seiten | Einstellungen → Permalinks einmal speichern |
| Slug kollidiert mit einer Seite | Seite oder Archiv nicht erreichbar | Eindeutigen Slug wählen |
| show_in_rest vergessen | Kein Block-Editor, keine REST-API | show_in_rest auf true |
| Alles als Taxonomie | Hunderte leere Übersichtsseiten | Individuelle Angaben als Felder |
| Kurzer Name wie „job“ ohne Präfix | Konflikt mit anderen Plugins | Eindeutigen Namen wählen |
Selbst machen oder machen lassen?
Ein einfacher Inhaltstyp mit zwei Feldern ist mit dem Code oben und einem Feld-Plugin gut selbst machbar. Aufwendiger wird es mit Filtern im Frontend, Karten, Importen bestehender Daten, Beziehungen zwischen Inhaltstypen — etwa Kurse und Lektionen —, strukturierten Daten, eigener Redaktionsoberfläche oder Hunderten von Einträgen, die performant abgefragt werden müssen. Das gehört in den Bereich eines eigenen Plugins. Beispiel für viele verknüpfte Inhaltstypen: Lernplattform-Plugin.
Zusatzfunktion, Anpassung eines bestehenden Plugins, kleiner Rechner oder Shortcode.
Eigene Inhaltstypen, Einstellungen im Backend, Formulare, Logik, Dokumentation.
Schnittstellen zu CRM, ERP oder Zahlungsdiensten, Mitgliederbereiche, Lernplattformen.
Orientierungswerte, keine Fixpreise — nach einem kurzen Gespräch bekommst du ein Festpreisangebot.
Wer die Plugins entwickelt.
Ich bin Manuel Killert, WordPress-Entwickler aus Quakenbrück. Seit 2020 baue ich WordPress-Websites, seit einigen Jahren auch eigene Plugins: einen Bürgergeldrechner und einen Mietprüfer für das Jobcenter Cloppenburg, das Lernplattform-Plugin hinter spanisch-lernen.com mit über 300 Lektionen, KI-Generatoren für Content-Plattformen und 3D-Konfiguratoren als WordPress-Plugins. Als Dozent an der KW Design Akademie unterrichte ich unter anderem Plugin-Entwicklung. Du sprichst direkt mit der Person, die den Code schreibt.
Echte Projekte — live ansehen.
Eigene Plugins und individuelle Funktionen aus meinen Projekten.

spanisch-lernen.com
Lernplattform mit über 300 Lektionen, Lernfortschritt, Audio-Übungen und eigenem Plugin.
Website ansehen ↗
BookBite
Content-Plattform mit über 5.500 Buchzusammenfassungen und KI-Buchempfehlungsgenerator.

KT Bodenteam
Professioneller Auftritt für einen Bodenleger — Vorher-Nachher-Slider und regionale SEO.
Website ansehen ↗FAQ — Custom Post Types in WordPress.
Was ist ein Custom Post Type in WordPress?
Ein eigener Inhaltstyp neben Beiträgen und Seiten, zum Beispiel Projekte, Immobilien, Stellenanzeigen oder Kurse. Er erhält einen eigenen Menüpunkt im Backend, eigene Felder, eigene Taxonomien zum Kategorisieren und eigene Vorlagen im Frontend.
Wann sollte ich einen Custom Post Type anlegen?
Wenn es viele Einträge derselben Art mit gleichen Angaben gibt, etwa Referenzprojekte mit Ort und Jahr oder Stellenanzeigen mit Standort und Arbeitszeit. Für einzelne individuelle Seiten oder Inhalte, die gut als Beiträge mit Kategorien funktionieren, ist er nicht nötig.
Gehört ein Custom Post Type ins Theme oder in ein Plugin?
In ein Plugin. Steht die Registrierung in der functions.php des Themes, verschwinden die Inhalte nach einem Theme-Wechsel aus Backend und Website. Die Darstellungsvorlagen dürfen dagegen im Theme liegen.
Was ist der Unterschied zwischen Taxonomie und Metafeld?
Eine Taxonomie gruppiert Einträge und erzeugt eigene Übersichtsseiten, etwa alle Projekte zur Badsanierung. Ein Metafeld speichert eine individuelle Angabe pro Eintrag, etwa das Baujahr oder den Preis.
Warum zeigt mein Custom Post Type einen 404-Fehler?
Meist wurden die Permalinks nach der Registrierung nicht neu geschrieben. Ein einmaliges Speichern unter Einstellungen, Permalinks behebt das. Weitere Ursachen sind ein Slug, der mit einer bestehenden Seite kollidiert, oder public auf false.
Brauche ich Advanced Custom Fields für eigene Felder?
Nicht zwingend. Feld-Plugins wie Advanced Custom Fields oder Meta Box sind schnell eingerichtet und für viele Projekte eine gute Wahl. Alternativ lassen sich Felder per register_post_meta und eigene Eingabemasken im Block-Editor ohne zusätzliches Plugin umsetzen.
Das bin ich – rechts im BildErzähl mir von deiner neuen Website.
Beschreib kurz, was du vorhast — du bekommst eine ehrliche Einschätzung zu Umfang, Zeit und Kosten.
Antwort meist innerhalb von 24 Stunden · hallo@manuelkillert.de