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.
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.