Spaces. Smartes Cloud Hosting für anspruchsvolle Webprojekte. Loslegen und Spaces testen. Von Mittwald.
Andreas Hecht 31. Oktober 2018

WordPress Intern: Was sind Custom Post Types?

Die meis­ten Menschen, die sich mit WordPress näher beschäf­ti­gen, haben bereits ein­mal von Custom Post Types  gehört. Wirklich etwas mit die­ser Funktion anzu­fan­gen, und vor allem, sie auch zu nut­zen, wis­sen lei­der die wenigs­ten Webdesigner und Blogger. Dabei sind Custom Post Types so etwas wie das Salz in der WordPress-Suppe – sie sind einer der Gründe, war­um WordPress heu­te so weit ver­brei­tet ist. Werfen wir also einen gemein­sa­men Blick auf die Custom Post Types und schau­en, was man mit ihnen anfan­gen kann.

Was genau sind Custom Post Types?

WordPress ist das belieb­tes­te Content-Management-System der Welt, weil es extrem anpass­bar und fle­xi­bel ist. Grundsätzlich ist alles denk­ba­re auch mach­bar, wobei die Funktion der Custom Post Types eine Art ist, mit WordPress das zu errei­chen, was erreicht wer­den soll.

Serienmäßig kommt WordPress bereits mit eini­gen Post Types daher, zu nen­nen wären:

  • Post (Post Type: ‘post’)
  • Page (Post Type: ‘page’)
  • Attachment (Post Type: ‘attach­ment’)
  • Revision (Post Type: ‘revi­si­on’)
  • Navigation menu (Post Type: ‘nav_menu_item’)

Ein Custom Post Type ist also nicht mehr als eine Erweiterung, eine wei­te­rer Bereich, um etwas zu pos­ten. Dabei ist ein Custom Post Type nicht auf eine spe­zi­el­le Inhaltsart, wie eine sta­ti­sche Seite oder einen dyna­mi­schen Blogpost fest­ge­legt. Ein Custom Post Type kann also jede Art von Inhalt dar­stel­len, auch wenn die Darstellung sta­ti­schen Inhalts nicht viel Sinn erge­ben wür­de, da Seiten hier­für wesent­lich bes­ser geeig­net wären.

Besonders gut jedoch eig­net sich der Custom Post Type für einen wei­te­ren, dyna­mi­schen (neben den Blogartikeln) Inhaltsbereich. Ein idea­ler Einsatzbereich wäre zum Beispiel die Integration eines Portfolios in ein Theme. Ein Portfolio ist dyna­misch, es wer­den von Zeit zu Zeit wei­te­re Einträge ange­legt. Auch wenn ein Portfolio anders aus­sieht, es ver­hält sich dyna­misch wie ein Blog.

Custom Taxonomies

Custom Taxonomies sind sozu­sa­gen eine Unterfunktion der Custom Post Types. Sie sor­gen dafür, dass Custom Post Types kate­go­ri­siert und mit Schlagworten ver­se­hen wer­den kön­nen. Es sind Kategorien und / oder Tags für die WordPress Custom Post Types. Das Erstellen der Custom Taxonomies geht recht leicht, wir wer­den wei­ter unten dar­auf zurück­kom­men. Allerdings sind Custom Taxonomies noch viel umfas­sen­der und viel­sei­ti­ger als die­ser Artikel auf­zu­zei­gen ver­mag. Damit beschäf­ti­ge ich mich in einem zukünf­ti­gen Beitrag.

Custom Post Types im praktischen Einsatz

Mit Hilfe der WordPress Custom Post Types wird es dir recht leicht fal­len, ein funk­tio­nel­les Portfolio anzu­le­gen. Gehen wir die nöti­gen Schritte ein­mal zusam­men durch:

Custom Post Type registrieren

Füge den fol­gen­den Code an das Ende der functions.php dei­nes Themes (wp-con­ten­t/the­mes/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 obers­te Abschnitt bis hin zum $rewri­te küm­mert sich um das erwei­ter­te Admin-Menü. Der wei­te­re, mitt­le­re, Teil sorgt für den Permalink mit dem Slug “port­fo­lio”. Der unte­re Teil des Codes legt fest, wel­che Einzelteile unter­stützt wer­den, wie zum Beispiel Titel, Editor, Excerpt, Beitragsbild und Kommentare.

Dein WordPress-Administrationsbereich zeigt dir nun den neu­en Menüpunkt “Portfolio”, eben­so die Untermenü Punkte “Kategorien” und “Schlagworte”.

Der neue WordPress-Admin Menüpunkt Portfolio

Um nun mit dem Portfolio arbei­ten zu kön­nen, braucht es noch etwas mehr als die­sen posi­tiv ange­leg­ten Menüpunkt. Wir müs­sen noch Templates erstel­len, um das Portfolio kor­rekt im WordPress-Theme anzu­zei­gen.

Nötige Templates für den Custom Post Type

Die WordPress Template Engine wird die Templates für die­sen Post Type auto­ma­tisch erken­nen, wenn sie im Format single-posttype.php für den ein­zel­nen Post und archive-posttype.php für die Übersichtsseite vor­lie­gen. Je nach­dem, wie umfang­reich dein Projekt wer­den soll, musst du nun ein bis zwei Templates erstel­len, eines nennst du single-portfolio.php und eines archive-portfolio.php.

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

Custom Post Type anzeigen

Erstelle mit dem Editor dei­ner Wahl eine neue lee­re Seite und nen­ne sie archive-portfolio.php. Kopiere nun den Inhalt dei­ner page.php (oder auch der index.php) in die­ses neu ange­leg­te Template. Ersetze anschlies­send die Beschreibung des Templates mit fol­gen­dem:

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

Nun ist es wich­tig, dem Template mit­zu­tei­len, wel­che Art von Inhalt ange­zeigt wer­den soll. Hierzu plat­zie­re ober­halb des Loop fol­gen­den Code:

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

Die archive-portfolio.php

Wichtig zu wissen

Bitte gehe nun zum Menüpunkt “Einstellungen => Permalinks” und spei­che­re dei­ne Permalinks ein­mal erneut ab. Tust du das nicht, so wird es beim Aufruf von www.ihre-seite.de/portfolio/ höchst­wahr­schein­lich einen 404-Fehler geben. Nach dem erneu­ten Abspeichern der Permalinks kann die Seite ohne Probleme auf­ge­ru­fen wer­den.

Ein Portfolio Eintrag

Da die Seite “Portfolio” phy­sisch nicht vor­han­den ist (aber pro­blem­los auf­ge­ru­fen wer­den kann), soll­te man die­sen Menüpunkt hän­disch über die Funktion “Links” auf­set­zen.

Menüpunkt händisch hinzufügen

Alternativ kann man auch eine neue, lee­re Seite mit dem Titel Portfolio anle­gen und das Template “Archive Portfolio Template” aus­wäh­len. Damit wur­de der nöti­ge Menüpunkt auto­ma­tisch gene­riert:

Den Menüpunkt Portfolio generieren

Fazit

Mit Custom Post Types ist es sehr leicht, die nor­ma­le WordPress-Funktionalität um wei­te­re Bereiche zu ergän­zen. Grundsätzlich sind der Kreativität kei­ne Grenzen gesetzt. Sogar sehr umfang­rei­che Aufgaben kön­nen hier­mit gelöst wer­den. Ein gutes Beispiel hier­für ist die Website des Premium WordPress-Theme-Providers WooThemes.com, der dor­ti­ge Menüpunkt “Themes” wur­de genau­so – wenn auch sehr viel kom­pli­zier­ter – umge­setzt.

Links zum Beitrag

(Beitragsbild: Depositphotos)

Andreas Hecht

Andreas Hecht

entwickelt WordPress-Websites und bietet dir einen Website Sicherheit Service und einen Performance Service für deine Website. Außerdem ist er Spezialist für Onpage SEO und bringt Deine Website in die Top-Suchergebnisse von Google. Auf seinem Blog schreibt er über WordPress, SEO und Content SEO.

3 Kommentare

  1. Einfacher und schnel­ler lässt sich ein Custom Post Type über Hasty erstel­len:
    https://www.wp-hasty.com/tools/wordpress-custom-post-type-generator/

  2. Ich hät­te in mei­nem Blog ger­ne einen eige­nen Beitragstyp für Reviews (z.B. von Produkten oder Hotels). Diese Reviews sol­len ganz nor­mal im Blog erschei­nen und sich ver­hal­ten, wie nor­ma­le Blog-Artikel. Sie sol­len aller­dings am Ende eine zusätz­li­che Box ent­hal­ten, in der eine Sternebewertung und ein paar Metadaten aus­ge­ge­ben wer­den.

    Ich habe bereits ein Plug-In mit einer Metabox und eini­gen Custom Fields ent­wi­ckelt.

    Nun stellt sich mir die Frage, wie ich WordPress den Beitragstyp ‘Review’ bei­bringt. Custom Post Types erschei­nen mir nicht der rich­ti­ge Weg, wenn dann ein eige­ner Administrationsbereich dafür erscheint und die Beiträge nicht im “nor­ma­len” Blog erschei­nen. Ich hat­te mir Post Formats ange­schaut, aber auch das scheint der fal­sche Weg. Hier gibt es nur einen Satz vor­de­fi­nier­ter Formate – und eben kei­ne Reviews.

    Was wäre der bes­te Weg, um Varianten von Blog Posts zu imple­men­tie­ren, die sich nur dadurch von nor­ma­len Blog Posts unter­schei­den, dass sie im Adminbereich eine zusätz­li­che Metabox anzei­gen und im Blog eine zusätz­li­che Box mit einer Bewertung aus­ge­ben?

  3. Ich wür­de hier noch etwas ergän­zen und kor­ri­gie­ren.

    Ergänzung ich wür­de den Post_Type nie­mals “port­fo­lio” nen­nen – son­dern immer mit einem Präfix arbei­ten z.B. “themename_portfolio”.

    Falls es schon eine Seite Portfolio gibt oder die von jeman­den erstellt wird, funk­tio­niert die Archivseite die­ses Post Types nicht mehr rich­tig. Und es kommt eine Error 404.

    Korrektur: Interne Links manu­ell set­zen ist immer etwas doof. Weil dann z.B. der akti­ve Menüpunkt nicht rich­tig mar­kiert wird, Man kann auch Archivseiten über den Menüeditor ver­lin­ken (auch wenn etwas ver­steckt). Im Menüeditor links “Portfolio” wäh­len und dort “Alle Einträge anzei­gen” aus­wäh­len – dies gene­riert den Link zum Archiv.

Schreibe einen Kommentar zu Samuel Rüegger Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.