
💡 So erstellst du einen benutzerdefinierten Post-Typ in WordPress: Code und Plugin
Standard-Beiträge und -Seiten decken die meisten Aufgaben einer typischen Website ab. Wenn jedoch ein Produktkatalog, eine Immobiliendatenbank oder ein Projektportfolio ins Spiel kommt, reichen diese beiden Inhaltstypen nicht mehr aus. Produkte mit Blog-Entwürfen zu vermischen ist umständlich, und Seiten mit benutzerdefinierten Feldern zu überladen, führt zu Chaos im Administrationsbereich.
WordPress löst dieses Problem durch Custom Post Types, Custom Post Types (CPT). Sie legen einen eigenen Bereich im Seitenleistenmenü mit eigenen Feldern, Kategorien und Anzeigevorlagen an. Produkte leben getrennt von Artikeln. Ereignisse vermischen sich nicht mit Seiten. Daten bleiben dort, wo sie hingehören.
Nachfolgend zwei erprobte Methoden: über Code mit register_post_type() (flexibel, keine zusätzlichen Plugins) und über das kostenlose Plugin CPT UI (kein PHP erforderlich). Beide funktionieren mit WordPress 6.7+ und wurden auf Produktivseiten getestet.
💡 Kurzüberblick:
- Registrieren Sie einen neuen Beitragstyp über die Kernfunktion
register_post_type(), ohne Plugins, mit voller Kontrolle über die Parameter. - Code-freie Alternative: das Custom Post Type UI Plugin bietet eine visuelle Oberfläche, senkt die Einstiegshürde und eliminiert Syntaxfehler.
- Nach der Registrierung erscheint der Typ im Seitenleistenmenü. Letzte Handgriffe: Taxonomien, Felder und Permalink-Leerung.
Was ein Custom Post Type ist
Jeder Inhalt in WordPress ist ein Datensatz mit einem post_type-Feld in der Tabelle wp_posts. Für Blogbeiträge ist es post. Für Seiten ist es page. Für Anhänge ist es attachment. Ein benutzerdefinierter Typ fügt einen weiteren Wert hinzu: product für Produkte, event für Ereignisse, portfolio für Projekte. Was auch immer den Anforderungen Ihrer Website entspricht.
Jeder CPT erhält einen eigenen Menüpunkt im Administrationsbereich, eine URL-Struktur (/events/webinar-2026/), eigene Taxonomien und die Unterstützung der benötigten Editor-Blöcke: Beitragsbilder, Auszüge, Editor, Kommentare. All dies wird über Checkboxen im supports-Array aktiviert, keine Magie dahinter.
Der Hauptvorteil ist die Organisation. Produkte treiben nicht im Blog-Feed umher. Ereignisse müssen nicht aus einem allgemeinen Haufen herausgefiltert werden. Die Administration wird schneller, und die Seitensuche arbeitet präziser.
Methode 1: Registrierung über Code, register_post_type()
Die grundlegende Methode, die seit WordPress 3.0 funktioniert. Keine Drittanbieter-Plugins erforderlich. Der Code kommt in die functions.php Ihres Child-Themes oder, sicherer, über das Code Snippets Plugin: ein Codefehler bringt die Seite dann nicht zum Absturz, sondern deaktiviert lediglich dieses spezifische Snippet.
Schritt 1: Funktion am init-Hook
Die Funktion hängt sich in init ein. Früher funktioniert nicht, weil der Kern noch nicht bereit ist, Registrierungen anzunehmen. Später bedeutet, dass der Typ erst bei der nächsten Anfrage erfasst wird. Hier eine minimale funktionsfähige Vorlage:
1 /** 2 * Registers a custom post type 'Books'. 3 * Place in functions.php of the child theme or via Code Snippets. 4 */ 5 function myprefix_register_book_post_type() { 6 register_post_type( 'book', array( 7 'labels' => array( 8 'name' => 'Books', 9 'singular_name' => 'Book', 10 'add_new_item' => 'Add New Book', 11 'edit_item' => 'Edit Book', 12 'view_item' => 'View Book', 13 'search_items' => 'Search Books', 14 'not_found' => 'No books found', 15 ), 16 'public' => true, 17 'has_archive' => true, 18 'rewrite' => array( 'slug' => 'books' ), 19 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ), 20 'show_in_rest' => true, 21 'menu_icon' => 'dashicons-book-alt', 22 ) ); 23 } 24 add_action( 'init', 'myprefix_register_book_post_type' );
Nach dem Einfügen des Codes erscheint ein Bereich „Bücher" im Administrationsbereich. Datensatz-URLs werden zu site.ru/books/book-name/. Es funktioniert sofort.
Schritt 2: Schlüsselparameter
Die Funktion nimmt zwei Argumente entgegen: einen Typ-Schlüsselstring (bis zu 20 Zeichen, lateinische Buchstaben und Bindestriche) und ein Einstellungs-Array. Hier die Parameter, die es sich lohnt, bewusst zu konfigurieren:
Parameter | Was er bewirkt | Empfehlung |
|---|---|---|
| Sichtbarkeit im Admin und Frontend |
|
| Archivseite für alle Datensätze dieses Typs |
|
| URL-Struktur (Slug) | Explizit setzen, ohne Sonderzeichen |
| Editor-Blöcke | Minimum: |
| Verfügbarkeit im Block-Editor |
|
| Icon im Seitenleistenmenü | Wählen Sie aus Dashicons |
Schritt 3: Taxonomien
Beitrags-Kategorien und -Schlagwörter sind standardmäßig nicht mit Ihrem CPT verknüpft. Erstellen Sie eigene:
1 function myprefix_register_book_taxonomies() { 2 register_taxonomy( 'genre', 'book', array( 3 'label' => 'Genres', 4 'rewrite' => array( 'slug' => 'genre' ), 5 'hierarchical' => true, 6 'show_in_rest' => true, 7 ) ); 8 9 register_taxonomy( 'book_tag', 'book', array( 10 'label' => 'Book Tags', 11 'rewrite' => array( 'slug' => 'book-tag' ), 12 'hierarchical' => false, 13 'show_in_rest' => true, 14 ) ); 15 } 16 add_action( 'init', 'myprefix_register_book_taxonomies' );
Taxonomien werden über register_taxonomy() mit einer expliziten Bindung an den post_type als zweiten Parameter registriert. hierarchical => true liefert eine Baumstruktur wie Kategorien. false ergibt eine flache Liste wie Schlagwörter.
Schritt 4: Permalinks leeren
Gehen Sie nach der Registrierung zu Einstellungen → Permalinks und klicken Sie auf „Änderungen speichern", auch wenn Sie nichts geändert haben. WordPress baut die Routing-Regeln neu auf. Ohne diesen Schritt liefern URLs wie /books/ einen 404-Fehler.
Wann Code ausreicht
Diese Methode funktioniert gut für ein oder zwei benutzerdefinierte Typen, wenn sich die Struktur nicht oft ändert. Plus: null zusätzliche Plugins und volle Kontrolle über jeden Parameter. Minus: bei komplexen Beziehungen zwischen mehreren CPTs und Frontend-Eingabeformularen wächst der Code schnell an.
Methode 2: Ohne Code, Custom Post Type UI Plugin
Wenn Sie die functions.php nicht anfassen möchten, installieren Sie Custom Post Type UI. Ein kostenloses Plugin von WebDevStudios: eine Million aktive Installationen, 4,6 Bewertung auf WordPress.org. Aktualisiert im Mai 2026, getestet bis WP 7.0.

So erstellen Sie einen CPT über die Oberfläche
- Installieren Sie das Plugin: Plugins → Installieren → „Custom Post Type UI" → Installieren → Aktivieren.
- Gehen Sie zu CPT UI → Add/Edit Post Types.
- Füllen Sie die Felder aus: Post Type Slug (lateinische Buchstaben, z. B.
event), Plural Label („Events"), Singular Label („Event"). - Aktivieren Sie im Block Settings: Public (True), Has Archive (True), Show in REST API (True).
- Aktivieren Sie im Block Supports mindestens: Title, Editor, Thumbnail, Excerpt.
- Klicken Sie auf Add Post Type.
Taxonomien werden an derselben Stelle erstellt, auf dem Tab Add/Edit Taxonomies. Geben Sie die Bindung an Ihren Beitragstyp an, und die Kategorien erscheinen im Seitenleistenmenü.
Stärken
Schnelle Registrierung ohne Risiko von Syntaxfehlern: das Plugin stellt selbst ein korrektes $args-Array zusammen. Der Tab Tools ermöglicht die Typ-Migration zwischen Websites durch Code-Export und -Import. CPT UI Pro fügt Blöcke für die Frontend-Ausgabe und Drag-and-Drop-Spalten im Admin hinzu, aber die kostenlose Version deckt die Registrierungsaufgabe vollständig ab.
Beachten Sie, dass das Plugin nur Typen und Taxonomien registriert. Für die Frontend-Anzeige benötigen Sie entweder Theme-Templates, CPT UI Pro oder eine Kombination mit Advanced Custom Fields oder Elementor.
Vergleich: Code versus Plugin
Kriterium | Code ( | Plugin (CPT UI) |
|---|---|---|
Einstiegshürde | Erfordert Verständnis von PHP-Arrays | Oberfläche ähnlich den Standard-WP-Einstellungen |
Anzahl CPTs | Unbegrenzt | Unbegrenzt |
Übertragung zwischen Websites | Code kopieren | Export/Import über Tools |
Zusätzlicher Code auf der Website | Keiner | Plus ein Plugin |
Plugin-Abhängigkeit | Keine | Ja, CPT UI muss aktiv sein |
Dokumentation |
In der Praxis wird oft eine Kombination genutzt: Typen für die Geschwindigkeit über CPT UI registrieren und Felder über Advanced Custom Fields hinzufügen. Das ergibt eine visuelle Konfigurationsoberfläche ohne eine einzige Zeile PHP.
⁉️🤔 Häufig gestellte Fragen
Muss ich die Permalinks nach dem Erstellen eines CPT leeren?
Ja, immer. Gehen Sie zu Einstellungen → Permalinks und klicken Sie auf „Speichern". WordPress baut die Routing-Regeln neu auf. Ohne dies liefern neue URLs wie
/books/einen 404-Fehler.
Wie unterscheidet sich CPT UI von ACF bei der Typ-Registrierung?
CPT UI registriert nur Beitragstypen und Taxonomien. ACF kann ab Version 6.1 ebenfalls CPTs registrieren, seine Hauptstärke sind jedoch benutzerdefinierte Felder. Die Kombination CPT UI + ACF gibt Ihnen eine Oberfläche für Typen und flexible Felder. Sie binden sich nicht an einen einzigen Anbieter.
Kann ich einen bestehenden Beitragstyp umbenennen?
Es gibt keinen direkten Mechanismus. Wenn Sie den
post_typein der Datenbank ändern, verschwinden alte Datensätze aus dem Admin. Der richtige Ansatz: Erstellen Sie einen neuen Typ mit dem gewünschten Namen, migrieren Sie die Datensätze mit einer SQL-AbfrageUPDATE wp_posts SET post_type = 'new_type' WHERE post_type = 'old_type'und entfernen Sie erst dann die alte Registrierung. Ein vollständiges Datenbank-Backup vor der Migration ist zwingend erforderlich.
Gehen benutzerdefinierte Typen beim Theme-Wechsel verloren?
Wenn Typen in der
functions.phpdes Themes registriert sind, ja, dann verschwinden sie beim Theme-Wechsel aus dem Admin. Die Datensätze bleiben in der Datenbank, sind aber nicht sichtbar. Registrieren Sie CPTs in einem eigenen Plugin oder über Code Snippets, dann überstehen die Typen jeden Theme-Wechsel.
Wie zeige ich CPT auf der Startseite im allgemeinen Feed an?
Fügen Sie einen Filter in Code Snippets hinzu:
add_filter( 'pre_get_posts', function( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'post_type', array( 'post', 'book' ) ); } } );. Ersetzen Sie Ihrenpost_typeim Array, und die Datensätze erscheinen im Feed neben den normalen Beiträgen.
Welche Methode wählen: abschließende Zusammenfassung
Beide Methoden führen zum gleichen Ergebnis: ein neuer Bereich erscheint im Seitenleistenmenü, bereit zur Befüllung mit Inhalten. Der Unterschied liegt nur im Werkzeug.
Wenn Sie selbst Hand an der Website anlegen und keine Scheu vor der functions.php haben, nutzen Sie Code. Eine register_post_type()-Funktion, null zusätzliche Plugins. Geeignet für Landingpages, kleine Kataloge und Projekte mit Entwicklerbetreuung.
Wenn Sie die Website an einen Kunden übergeben oder ein Content-Projekt mit einem Dutzend Typen aufbauen, installieren Sie CPT UI. Die visuelle Oberfläche senkt die Einstiegshürde, und der Konfigurationsexport spart Stunden bei der Migration zwischen Plattformen.
Richten Sie in jedem Fall nach der Registrierung die Anzeige ein: single- und archive-Templates im Theme oder visuelles Layout über CPT UI Pro / Elementor Pro. Ohne diesen Schritt bleiben die Inhalte nur im Administrationsbereich.



