Erstellen eines benutzerdefinierten Post-Type (Custom Post Type) in WordPress: Ein umfassender Leitfaden mit PHP-Beispielen
Marc Wagner
September 5, 2024
WordPress ist bekannt für seine Flexibilität und Erweiterbarkeit. Das Erstellen eines benutzerdefinierten Post-Types (Custom Post Types) gehört auch zu eben dieser Flexibilität. Diese erlauben es dir, über die standardmäßigen Inhalte wie Beiträge und Seiten hinaus spezifische Inhalte anzulegen. Wenn du z. B. eine Website für Filme erstellst, kannst du einen eigenen Post-Typ für Filme anlegen, der sich von normalen Blogbeiträgen unterscheidet.
In diesem Blogartikel zeigen wir dir, wie du mit PHP einen Custom Post Type in WordPress erstellst, wie du ihn registrierst und worauf du achten musst.
Was ist ein Custom Post Type? #
WordPress verwendet standardmäßig verschiedene Post-Typen wie Beiträge (post
), Seiten (page
) und Medien (attachment
). Mit Custom Post Types kannst du diese Liste erweitern, um benutzerdefinierte Inhalte zu verwalten, wie z. B. Portfolios, Produkte, Rezepte oder Events.
Erstellen eines benutzerdefinierten Post-Types in WordPress #
Voraussetzungen
Bevor wir starten, stelle sicher, dass du:
- Zugriff auf die functions.php-Datei deines Themes hast oder ein benutzerdefiniertes Plugin verwendest.
- Grundlegende Kenntnisse in PHP und WordPress besitzt.
Schritt 1: Custom Post Type registrieren
Um einen benutzerdefinierten Post-Typ zu erstellen, verwendest du die WordPress-Funktion register_post_type()
. Diese Funktion registriert den neuen Post-Typ und ermöglicht es dir, Parameter wie Bezeichnung, Darstellung und Funktionalität zu definieren.
PHP-Beispiel: Custom Post Type “Filme”
Hier ist ein Beispiel dafür, wie du einen Custom Post Type für Filme erstellst:
// Custom Post Type für Filme registrieren function cpt_filme() { $labels = array( 'name' => _x( 'Filme', 'post type general name', 'textdomain' ), 'singular_name' => _x( 'Film', 'post type singular name', 'textdomain' ), 'menu_name' => _x( 'Filme', 'admin menu', 'textdomain' ), 'name_admin_bar' => _x( 'Film', 'add new on admin bar', 'textdomain' ), 'add_new' => _x( 'Neuen Film hinzufügen', 'Film', 'textdomain' ), 'add_new_item' => __( 'Neuen Film hinzufügen', 'textdomain' ), 'new_item' => __( 'Neuer Film', 'textdomain' ), 'edit_item' => __( 'Film bearbeiten', 'textdomain' ), 'view_item' => __( 'Film ansehen', 'textdomain' ), 'all_items' => __( 'Alle Filme', 'textdomain' ), 'search_items' => __( 'Filme durchsuchen', 'textdomain' ), 'not_found' => __( 'Keine Filme gefunden', 'textdomain' ), 'not_found_in_trash' => __( 'Keine Filme im Papierkorb gefunden', 'textdomain' ) ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'filme' ), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail', 'comments' ), ); register_post_type( 'filme', $args ); } add_action( 'init', 'cpt_filme' );
Erklärung des Codes
- Labels: Hier definierst du die Bezeichnungen, die im Backend angezeigt werden, z. B. in der Admin-Navigation oder beim Erstellen eines neuen Beitrags.
name
: Allgemeiner Name für die gesamte Post-Typ-Gruppe.singular_name
: Singularname, der in der Benutzeroberfläche verwendet wird.add_new
: Bezeichnung des Buttons zum Hinzufügen neuer Inhalte.
- Args: Dies sind die Argumente, die die Funktionsweise des Custom Post Types bestimmen.
public
: Gibt an, ob der Post-Typ öffentlich zugänglich ist.publicly_queryable
: Macht den Post-Typ über die URL ansprechbar.rewrite
: Bestimmt den URL-Slug (in diesem Fall „filme“).supports
: Definiert die Standard-Editor-Optionen, die für den Post-Typ unterstützt werden (z. B. Titel, Editor, Thumbnail etc.).
- register_post_type(): Diese Funktion registriert den Post-Typ in WordPress.
- add_action(‘init’, ‘cpt_filme’): Der Post-Typ wird registriert, wenn WordPress initialisiert wird.
Schritt 2: Den Custom Post Type im Admin-Bereich sichtbar machen
Nachdem du den Post-Typ erstellt hast, sollte er im WordPress-Dashboard im Menü sichtbar sein. Dort kannst du neue “Filme” hinzufügen und verwalten, ähnlich wie normale Beiträge.
Schritt 3: Archivseiten und Vorlagen anpassen
Um die Archivseiten oder Einzelansichten deines Custom Post Types zu steuern, kannst du spezielle Template-Dateien in deinem Theme erstellen:
archive-filme.php
: Diese Datei steuert die Anzeige der Archivseite des Custom Post Types.single-filme.php
: Diese Datei steuert die Anzeige einzelner Beiträge deines Custom Post Types.
Falls diese Dateien nicht vorhanden sind, verwendet WordPress die Standardvorlagen archive.php
und single.php
.
Bonus: Taxonomien hinzufügen
Um deinen Custom Post Type weiter zu verbessern, kannst du auch benutzerdefinierte Taxonomien (ähnlich wie Kategorien und Tags) hinzufügen:
function create_filme_taxonomy() { register_taxonomy( 'genre', 'filme', array( 'label' => __( 'Genre' ), 'rewrite' => array( 'slug' => 'genre' ), 'hierarchical' => true, // ähnlich wie Kategorien ) ); } add_action( 'init', 'create_filme_taxonomy' );
Fazit #
Mit benutzerdefinierten Post-Typen kannst du WordPress so anpassen, dass es für jede Art von Website funktioniert – sei es eine Portfolio-Website, ein Blog, ein Online-Shop oder eine Filmseite. Der obige Code gibt dir die Werkzeuge an die Hand, um eigene Post-Typen zu erstellen und anzupassen.
Wenn du noch mehr Funktionalität benötigst, kannst du Plugins wie “Custom Post Type UI” verwenden, um den Prozess weiter zu vereinfachen. Aber mit ein wenig PHP-Kenntnissen kannst du mit register_post_type()
deine eigenen Post-Typen ganz nach deinen Bedürfnissen erstellen.
Viel Spaß beim Erstellen deines eigenen Custom Post Types in WordPress!
Artikel von:
Marc Wagner
Hallo, Marc hier. Ich bin der Gründer von Forge12 Interactive und bereits seit über 20 Jahren leidenschaftlich dabei Webseiten, Onlineshops, Anwendungen und SaaS-Lösungen für Unternehmen zu entwickeln. Vor der Gründung habe ich bereits in Börsen notierten Unternehmen gearbeitet und mir allerlei Wissen angeeignet. Dieses Wissen möchte ich nun an meine Kunden weitergeben.