Wie du in nur 5 Minuten einen Post-Type in WordPress mit PHP erstellst.
Marc Wagner
Oktober 30, 2020
Heute will ich euch zeigen, wie einfach es möglich ist, in nur 5 Minuten einen eigenen Post-Type für WordPress zu erzeugen.
Lasst uns daher direkt loslegen.
Post-Type anlegen mit PHP #
Zunächst legen wir eine neue Datei in unserem Child-Theme an und öffnen diese. Ich nenne die Datei der Einfachheit halber “WordPressCustomPostType.php”.
Als Nächstes erstellen wir unsere Klasse, die für das Verwalten unseres neuen Post-Types zuständig sein wird. Das sieht dann wie folgt aus:
<?php
if(!defined('ABSPATH')){
exit();
}
class WordPressCustomPostType{
public function __construct(){}
}
new WordPressCustomPostType();
Jetzt brauchen wir eine Funktion, die dafür sorgt, das WordPress darüber informiert wird, das wir einen neuen Post-Type haben der geladen werden soll. Dafür verwenden wir die Funktion “register_post_type”.
public function wp_registerPostType(){
$labels = array(
'name' => __( 'Custom Post Type' )
);
$args = array(
'labels' => $labels,
'capability_type' => 'page',
'show_ui' => true,
'supports' => array( 'title', 'editor', 'thumbnail', 'revisions', 'excerpt' )
);
register_post_type( 'my_custom_post_type', $args );
}
Kurze Erklärung: In dieser Anleitung befassen wir uns nur mit den minimalen Angaben die man benötigt, um einen eigenen Post-Type in WordPress zu erstellen. Wenn du mehr Angaben machen möchtest, kannst du diese jederzeit hinzufügen. Nützliche Informationen findest du dabei direkt in der WordPress Code Reference:
- Die Benennungen für die Labels findest du hier.
- Die Argumente, die du verwenden kannst findest du hier.
- Alle Felder für Support findest du hier.
Zu guter Letzt müssen wir WordPress mitteilen, das unser Code ausgeführt werden soll, sobald alle Core Funktionen geladen wurden. Dafür erweitern wir den Konstruktor und fügen ein neues Event hinzu:
public function __construct() {
add_action( 'init', array($this, 'wp_registerPostType' ) );
}
Jetzt das ganze abspeichern und wir können ins WordPress Backend wechseln, um uns unseren neuen Post-Type anzeigen zu lassen.

Du möchtest mehr erfahren? Dann wirf einen Blick in die Code Reference von WordPress.
Ausgeben der Daten mit einem WordPress Shortcode #
Eine Möglichkeit, um auf deine Daten zuzugreifen, ist über Shortcodes. Einmal angelegt, kannst du den Shortcode überall wiederverwenden.
Zunächst fügen wir eine neue Funktion hinzu, die unsere Ausgabe erstellt. Um die Anleitung kurzzuhalten, werden wir einfach alle Titel unserer Einträge abfragen und untereinander ausgeben. Der Code hierfür sieht wie folgt aus:
public function wp_doShortocde( $atts ) {
$myCustomPosts = get_posts( array(
'post_type' => 'my_custom_post_type'
)
);
$listOfTitles = array();
foreach ( $myCustomPosts as $postItem /** @var WP_Post $postItem */ ) {
$listOfTitles[] = $postItem->post_title;
}
return implode( '<br>', $listOfTitles );
}
Damit WordPress unseren Code aufruft, müssen wir das ganze natürlich miteinander verknüpfen. Dafür gibt es die Funktion “add_shortcode”.
add_shortcode( 'run_my_custom_post_type', array( $this, 'wp_doShortocde' ) );
In unserem Beispiel nenne ich unseren Shortcode “run_my_custom_post_type” der dann die Funktion “wp_doShortcode” die wir davor angelegt haben aufruft. Nun können wir den Shortcode folgendermaßen auf einer beliebigen Seite oder einem Beitrag hinterlegen:
[run_my_custom_post_type]
Ich habe dazu eine neue Seite angelegt und über den Gutenberg-Editor meinen Shortcode eingetragen.

Jetzt noch schnell ein paar Einträge mit unserem Custom Post-Type erstellen.

Sobald du fertig bist, kannst du dir das Ganze im Frontend anschauen, in dem du die Seite mit deinem Shortcode aufrufst. Bei mir sieht das ganze jetzt so aus:

Nützliche Tipps #
Ein paar nützliche Tipps um sicherzustellen das alles klappt.
- Verwende für deine Post-Types einen einzigartigen Präfix, um sicherzustellen, dass es später keine Komplikationen mit anderen Plugins gibt.
- Verwende ein Präfix für Funktionen, die durch ein WordPress Event aufgerufen werden, damit du eine bessere Übersicht über deinen Code behältst.
Code ohne Shortcode #
<?php
if(!defined('ABSPATH')){
exit();
}
class WordPressCustomPostType{
public function __construct(){
add_action('init', array($this, 'wp_registerPostType'));
}
public function wp_registerPostType(){
$labels = array(
'name' => __( 'Custom Post Type' )
);
$args = array(
'labels' => $labels,
'capability_type' => 'page',
'show_ui' => true,
'supports' => array( 'title', 'editor', 'thumbnail', 'revisions', 'excerpt' )
);
register_post_type( 'my_custom_post_type', $args );
}
}
new WordPressCustomPostType();
Code mit Shortcode #
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit();
}
class WordPressCustomPostType {
public function __construct() {
add_action( 'init', array( $this, 'wp_registerPostType' ) );
add_shortcode( 'run_my_custom_post_type', array( $this, 'wp_doShortocde' ) );
}
public function wp_doShortocde( $atts ) {
$myCustomPosts = get_posts( array(
'post_type' => 'my_custom_post_type'
)
);
$listOfTitles = array();
foreach ( $myCustomPosts as $postItem /** @var WP_Post $postItem */ ) {
$listOfTitles[] = $postItem->post_title;
}
return implode( '<br>', $listOfTitles );
}
public function wp_registerPostType() {
$labels = array(
'name' => __( 'Custom Post Type' )
);
$args = array(
'labels' => $labels,
'capability_type' => 'page',
'show_ui' => true,
'supports' => array( 'title', 'editor', 'thumbnail', 'revisions', 'excerpt' )
);
register_post_type( 'my_custom_post_type', $args );
}
}
new WordPressCustomPostType();
Fazit #
Mit WordPress lassen sich schnell und bequem eigene Inhaltstypen (Post-Types) anlegen die du dann über WordPress verwalten kannst. Auch die Ausgabe über einen Shortcode ist schnell erledigt.
Ich hoffe, dir hat der kleine Beitrag geholfen. Ich freue mich natürlich jederzeit über Feedback zu einzelnen Themen oder Anregungen.
Wie Forge12 mit solchen Themen arbeitet
Forge12 betreibt und verantwortet umsatzkritische WordPress- und WooCommerce-Systeme im laufenden Betrieb. Bevor wir Systeme übernehmen oder weiterentwickeln, analysieren wir sie vollständig – technisch, strukturell und betrieblich. Das System Audit ist der Einstiegspunkt für jede Zusammenarbeit.
Artikel von:
Marc Wagner
Marc Wagner ist Gründer der Forge12 Interactive GmbH und verantwortlich für Betrieb, Absicherung und Weiterentwicklung umsatzkritischer WordPress- und WooCommerce-Systeme.
Seit über 20 Jahren arbeitet er an Websites, Online-Shops und individuellen Softwarelösungen – vom Mittelstand bis zu Strukturen börsennotierter Unternehmen. Sein Fokus liegt nicht auf Projekten, sondern auf dauerhaftem Betrieb: stabile Systeme, klare Verantwortlichkeiten und technische Entscheidungen mit wirtschaftlicher Konsequenz.
Bei Forge12 begleitet er Unternehmen, die ihre Systeme nicht nur bauen, sondern langfristig sicher betreiben und automatisieren wollen.

