WordPress Intern: Ein Einstieg in Custom Post Types

Eine Einführung in Custom Post Types

Andreas Hecht

ist WordPress-Entwickler und bietet dir WordPress-Sicherheit für deine Website. Zudem entwickelt er...

Die meisten Menschen, die sich mit WordPress etwas näher beschäftigen, haben bereits einmal von Custom Post Types  gehört. Wirklich etwas mit dieser Funktion anzufangen, und vor allem sie auch zu nutzen, wissen leider die wenigsten Webdesigner und Blogger. Dabei sind Custom Post Types so etwas wie das Salz in der WordPress Suppe – sie sind einer der Gründe, warum WordPress heute so weit verbreitet ist und geliebt wird. Werfen wir heute also einen gemeinsamen Blick auf die Custom Post Types und schauen, was man mit ihnen anfangen kann.

Eine Einführung in Custom Post Types

Was genau sind Custom Post Types?

WordPress ist das beliebteste Content Management System der Welt, weil es extrem anpassbar und flexibel ist. Grundsätzlich ist alles denkbare auch machbar, wobei die Funktion der Custom Post Types eine Art ist, mit WordPress das zu erreichen, was erreicht werden soll.

Serienmäßig kommt WordPress bereits mit einigen Post Types daher, zu nennen wären:

  • Post (Post Type: ‘post’)
  • Page (Post Type: ‘page’)
  • Attachment (Post Type: ‘attachment’)
  • Revision (Post Type: ‘revision’)
  • Navigation menu (Post Type: ‘nav_menu_item’)

Ein Custom Post Type ist also nicht mehr als eine Erweiterung, eine weiterer Bereich, um etwas zu posten. Dabei ist ein Custom Post Type nicht auf eine spezielle Inhaltsart, wie eine statische Seite oder einen dynamischen Blogpost festgelegt. Ein Custom Post Type kann also jede Art von Inhalt darstellen, auch wenn die Darstellung statischen Inhalts nicht viel Sinn ergeben würde, da Seiten hierfür wesentlich besser geeignet wären.

Besonders gut jedoch eignet sich der Custom Post Type für einen weiteren, dynamischen (neben den Blogartikeln) Inhaltsbereich. Ein idealer Einsatzbereich wäre zum Beispiel die Integration eines Portfolios in ein Theme. Ein Portfolio ist dynamisch, es werden von Zeit zu Zeit weitere Einträge angelegt. Auch wenn ein Portfolio anders aussieht, es verhält sich dynamisch wie ein Blog.

Custom Taxonomies

Custom Taxonomies sind sozusagen eine Unterfunktion der Custom Post Types. Sie sorgen dafür, dass Custom Post Types kategorisiert und mit Schlagworten versehen werden können. Es sind Kategorien und / oder Tags für die WordPress Custom Post Types. Das Erstellen der Custom Taxonomies geht recht leicht, wir werden weiter unten darauf zurückkommen. Allerdings sind Custom Taxonomies noch viel umfassender und vielseitiger als dieser Artikel aufzuzeigen vermag. Damit beschäftige ich mich in einem zukünftigen Beitrag.

Custom Post Types im praktischen Einsatz

Mit Hilfe der WordPress Custom Post Types wird es Ihnen recht leicht fallen, ein funktionelles Portfolio anzulegen, in dem Sie anschliessend Ihre Arbeiten ansprechend präsentieren können. Gehen wir die nötigen Schritte nun einmal zusammen durch:

Kennst du unser E-Book-Bundle? Spare jetzt 6,99 €!

E-Book Bundle von Andreas Hecht

Custom Post Type registrieren

Fügen Sie den folgenden Code an das Ende der functions.php Ihres Themes (wp-content/themes/ihr Theme).

/**
*
* Registration unseres Custom Post Types "Portfolio"
*
*/

function ah_custom_post_type() {

$labels = array(
'name' => 'Portfolio Einträge',
'singular_name' => 'Portfolio',
'menu_name' => 'Portfolio',
'parent_item_colon' => '',
'all_items' => 'Alle Einträge',
'view_item' => 'Eintrag ansehen',
'add_new_item' => 'Neuer Eintrag',
'add_new' => 'Hinzufügen',
'edit_item' => 'Eintrag bearbeiten',
'update_item' => 'Update Eintrag',
'search_items' => '',
'not_found' => '',
'not_found_in_trash' => '',
);
$rewrite = array(
'slug' => 'portfolio',
'with_front' => true,
'pages' => true,
'feeds' => true,
);
$args = array(
'labels' => $labels,
'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail', 'comments', 'trackbacks', ),
'taxonomies' => array( 'category', 'post_tag' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'menu_position' => 5,
'can_export' => false,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'rewrite' => $rewrite,
'capability_type' => 'page',
);
register_post_type( 'portfolio', $args );

}

// Hook into the 'init' action
add_action( 'init', 'ah_custom_post_type', 0 );

Ein paar Worte zum Code

Der oberste Abschnitt bis hin zum $rewrite kümmert sich um das erweiterte Admin-Menü. Der weitere, mittlere Teil sorgt für den Permalink mit dem Slug “portfolio”. Der untere Teil des Codes legt fest, welche Einzelteile unterstützt werden, wie zum Beispiel Titel, Editor, Excerpt, Beitragsbild und Kommentare.

Ihr WordPress-Administrationsbereich zeigt Ihnen nun den neuen Menüpunkt “Portfolio”, ebenso die Untermenü Punkte “Kategorien” und “Schlagworte”.

Der neue WordPress-Admin Menüpunkt Portfolio

Um nun mit dem Portfolio arbeiten zu können, braucht es noch etwas mehr als diesen positiv angelegten Menüpunkt. Wir müssen noch Templates erstellen, um das Portfolio korrekt im WordPress-Theme anzuzeigen.

Nötige Templates für den Custom Post Type

Die WordPress Template Engine wird die Templates für diesen Post Type automatisch erkennen, wenn sie im Format single-posttype.php für den einzelnen Post und archive-posttype.php für die Übersichtsseite vorliegen. Je nachdem, wie umfangreich Ihr Projekt werden soll, müssen Sie nun ein bis zwei Templates erstellen, eines nennen Sie dann single-portfolio.php und eines archive-portfolio.php.

In diesem Beispiel legen wir nun das Template archive-portfolio.php an, um die Portfolio-Einträge alle auf einer Seite zu zeigen.

Custom Post Type anzeigen

Erstellen Sie mit dem Editor Ihrer Wahl eine neue leere Seite und nennen Sie sie archive-portfolio.php. Kopieren Sie nun den Inhalt Ihrer page.php (oder auch der index.php) in dieses neu angelegte Template. Ersetzen Sie anschliessend die Beschreibung des Templates mit folgendem:

<?php
 /**
 * Template Name: Archive Portfolio Template
 */

Nun ist es wichtig dem Template mitzuteilen, welche Art von Inhalt angezeigt werden soll. Hierzu platzieren Sie oberhalb des Loop folgenden Code:

<?php query_posts(array('post_type'=>'portfolio')); ?>

Die archive-portfolio.php

Wichtig zu wissen

Bitte gehen Sie nun zum Menüpunkt “Einstellungen => Permalinks” und speichern Ihre Permalinks einmal erneut ab. Tun Sie dies nicht, so wird es beim Aufruf von www.ihre-seite.de/portfolio/ höchstwahrscheinlich einen 404-Fehler geben. Nach dem erneuten Abspeichern der Permalinks kann die Seite ohne Probleme aufgerufen werden.

Ein Portfolio Eintrag

Da die Seite “Portfolio” physisch nicht vorhanden ist (aber problemlos aufgerufen werden kann), sollte man diesen Menüpunkt händisch über die Funktion “Links” aufsetzen.

Menüpunkt händisch hinzufügen

Alternativ kann man auch eine neue, leere Seite mit dem Titel Portfolio anlegen und das Template “Archive Portfolio Template” auswählen. Damit wurde der nötige Menüpunkt automatisch generiert:

Den Menüpunkt Portfolio generieren

Fazit

Mit Custom Post Types ist es sehr leicht, die normale WordPress-Funktionalität um weitere Bereiche zu ergänzen. Grundsätzlich sind der Kreativität keine Grenzen gesetzt, auch sehr umfangreiche Aufgaben können hiermit gelöst werden. Ein gutes Beispiel hierfür ist die Website des Premium WordPress-Theme-Providers WooThemes.com, der Menüpunkt “Themes” wurde genauso – wenn auch sehr viel komplizierter – umgesetzt.

Links zum Beitrag

(dpe)

Andreas Hecht

ist WordPress-Entwickler und bietet dir WordPress-Sicherheit für deine Website. Zudem entwickelt er WooCommerce Shops mit Ladezeiten von unter einer Sekunde. Er schreibt seit 2012 für Dr. Web. Auf seinem Blog veröffentlicht er unter anderem nützliche WordPress-Snippets.

Hinterlasse einen Kommentar

13 Kommentare auf "WordPress Intern: Ein Einstieg in Custom Post Types"

Benachrichtige mich zu:
avatar
Sortiert nach:   neueste | älteste | beste Bewertung
Tim-Lars Schnehage
Gast

Hallo,

ich konnte anhand ihres Tutorials einen Custom Post Types erstellen. Nun möchte ich die einzelnen Beiträge kategorisieren… Kategorien sind angelegt, allerdings werden mir die custom posts nicht auf der kategorien-übersichtsseite angezeigt. Wenn ich einen “normalen” Beitrag in die verwendeten Kategorien verschiebe, werden mir diese angezeigt.
Haben sie eine Lösung für mein Problem?

MfG
Tim

Felix
Gast

Hallo,

bei einer neuen Seite habe ich zurzeit ein Problem: Ich muss mit Custom Post Types in Kategorien posten. Um euch das mal zu veranschaulichen:

Stell dir vor, die Seite handelt über Autos. Ich möchte für jede Marke ein Custom Post Type haben.
Die URL Struktur sollte so sein:
meineseite.de/autos/bmw/bmw-x3
meineseite.de/autos/audi/a-8

Wenn ich nun aber einen Custom Post erstelle, sieht es so aus:
meineseite.de/custom-post/titel

Hast Du einen Tipp für mich?

axel
Gast
Hallo Allerseits ich verzweifle fast grade an dem Versuch meine CTPs zu kategoriseren – und zwar so, das sich das auch in deren URLs wiederspiegelt (irgendwie steh ich total auf dem Schlauch obwohl schon seit 1 1/2 Tagen teste) Ich versuchs mal folgendermaßen zu erklären: 1: Wenn ich einen Post (also einen Beitrag vom Post-Type “post”) anlege, dann weise ich diesen einer Kategorie zu. Heisst der Beitrag “Hallo Welt” und befindet sich in der Kategorie “Allgemein” entsteht daraus der Slug …./allgemein/hallo-welt/ Verschiebe ich diesen Beitrag in zBsp. die Kategorie “Vermischtes” entsteht darus der Slug …./vermischtes/hallo-welt/ Und genaus dieses Verhalten versuche… Read more »
trackback

[…] kann ich Ihnen – dank optimaler Umsetzung aller neuen Funktionen – als Vorlage zum Erlernen neuer Funktionen vorbehaltlos […]

Sebastian
Gast

Erstmal danke für dieses kleine Tutorial. Hat alles bei mir soweit funktioniert. Nur leider werden die Beiträge des Custom Post Types nicht in den Kategorien und Schlagworten auf der Website angezeigt. Wie kann ich das ändern?

trackback

[…] Hier werden die Beiträge, Seiten und Custom Post Types […]

trackback

[…] Wie eigentlich alles in WordPress, gestaltet sich das Anlegen eigener Post Types recht einfach. Über den Menüpunkt „Design“ und den Untermenüpunkt „Editor“ gelangt man zu der Datei „functions.php“, die die Theme-Funktionen beinhaltet. Hier muss der entsprechende Code für den gewünschten Custom Post Type eingetragen werden – beispielsweise am Ende der Datei. Ein gutes Code-Beispiel und weiterführende Informationen zur Implementierung von Custom Post Types …. […]

Markus
Gast
Hallo Andreas, ich denke gerade weil sich der Beitrag an Einsteiger wendet ist es umso wichtiger, die unterschiedlichen Konzepte deutlich zu machen. In dem Moment, wo der Parameter “has_archive” auf “true” steht greift die archive-portfolio.php grundsätzlich und es ist nicht notwendig, beim Anlegen der Seite die als Menüpunkt dienen soll, ein Page-Template auszuwählen. Das irritiert deshalb, weil eben genau die beiden Möglichkeiten, ein Archiv für CPTs anzulegen, exisitieren: Entweder über ein Page-Template oder über eine archive.php die hier aber kombiniert werden ohne diesen wichtigen Unterschied deutlich zu machen. Das führt aus meiner Sicht auf eine falsche Fährte und soweit ich… Read more »
Siegfried
Gast

Hallo, guten Morgen,
vielen Dank für den informativen Artikel. Allerdings hat sich für mich eine Frage ergeben. Warum sollte ich einen separaten Bereich anlegen, wie zum Beispiel “Portfolio”? Kann ich dazu nicht auch die Kategorie “Portfolio” erstellen? Ist das nicht einfacher, schneller? Sorry für mich hat sich der Nutzen der Custom Post Types durch diesen Artikel noch nicht ganz erschlossen. Danke für ein paar ergänzende Worte.

Andreas Hecht
Gast

Hallo, klar kannst du einfach nur eine Kategorie dafür erstellen. Custom Post Types sind jedoch für eine klare Trennung zwischen verschiedenen Inhalten gedacht. Besonders auch, weil man

Andreas Hecht
Gast

Bin abgerutscht, sorry 🙂

Custom Post Types werden auch gern genommen, weil man ein bewusst anderes Design für diesen Bereich haben will, sprich: ein Portfolio (um beim Beispiel zu bleiben) soll bedeutend anders aussehen als ein normaler Blogpost. Hier hat man also die Gelegenheit, einzelne Portfolio Einträge bereits komplett anders darzustellen, als einen Blogpost. Auch die Übersichtsseite der Portfolio-Einträge wird sich im allgemeinen vom Design her komplett vom Blog abheben (sollen).

Custom Post Types sorgen hier also für eine klare Trennung von Design und Inhalt.

Markus
Gast
Aus meiner Sicht ist der Beitrag zu Custom Post Types potentiell verwirrend und birgt diverse Fallstricke die einen weniger geübten WordPresser einige grauen Haare kosten dürften. Zum einen wird hier das Anlegen eines Archiv-Templates empfohlen dass dann aber gleichzeitig als WordPress-Page-Template ausgezeichnet wird. Gleichermaßen ist es ein erheblicher Unterschied, ob der Inhalt aus einer page.php oder einer index.php kopiert wird. Richtig ist, das die Template-Engine eine archive-posttypename.php erkennt. In diesem Fall muss WordPress nicht über query_posts mitgeteil werden was zu tun ist – es reicht ein “normaler” Loop. Das Fragment zur Auszeichnung als Page-Template (Template Name: usw.) hat in dieser… Read more »
Andreas Hecht
Gast
Hallo Markus, vielen Dank für Deinen Kommentar! Schön, dass Du Dir die Zeit genommen hast, meinen Artikel zu kritisieren – an konstruktiver Kritik kann ich schliesslich nur wachsen. Beim nächsten Kommentar in dieser Länge bitte ich allerdings dringend um die Nutzung von Absätzen. Das erleichtert die Lesbarkeit enorm! Punkt 1: Ich zeichnete die Datei archive-portfolio.php aus gutem Grund als Page-Template aus. Dieser Grund ist oben im Artikel auch deutlich angeführt. Wenn ich einen Custom Post Type “Portfolio” (um beim Beispiel zu bleiben) erstelle, dann kann ich den im Anschluss nicht so einfach als Menüpunkt zum WordPress-Menü hinzufügen. Aufrufen kann ich… Read more »
wpDiscuz