Skip to content

Alles für WordPress, Webentwicklung — und mehr

💡 So erstellst du einen benutzerdefinierten Post-Typ in WordPress: Code und Plugin

💡 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 */
5function 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}
24add_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

public

Sichtbarkeit im Admin und Frontend

true für die meisten Fälle

has_archive

Archivseite für alle Datensätze dieses Typs

true für Kataloge und Sammlungen

rewrite

URL-Struktur (Slug)

Explizit setzen, ohne Sonderzeichen

supports

Editor-Blöcke

Minimum: title editor thumbnail

show_in_rest

Verfügbarkeit im Block-Editor

true ist zwingend, sonst öffnet Gutenberg nicht

menu_icon

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:

1function 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}
16add_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.

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.

Oberfläche zum Hinzufügen eines benutzerdefinierten Inhaltstyps im CPT UI-Plugin

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 (register_post_type)

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

developer.wordpress.org

docs.pluginize.com

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_type in 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-Abfrage UPDATE 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.php des 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 Ihren post_type im 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.