Startseite BlogWordPressCustom Post Types ab WordPress 3.0 nutzen

Custom Post Types ab WordPress 3.0 nutzen

29. April 2010 — WordPress
WordPress 3.0: custom post types, taxonomy

WordPress steht demnächst in der Version 3.0 stabil zur Verfügung. Neben zahlreichen kleinen Verbesserungen und Erweiterungen wartet WordPress 3.0 mit einer sehr mächtigen Neuerung auf: den Custom Post Types. Denn bislang kannte WordPress nur Post (Artikel/ Beitrag) und Page (Seite). Demnächst kann man dieses System dank register_post_type beliebig erweitern. Wie der aktuelle Stand bei WordPress 3.0 bei den Custom Post Types ist, was man damit machen kann und wie man das vorab leicht testen kann, zeigt dieser Beitrag.

WordPress 3.0

Aktuell liegt WordPress in der Version 3.0-beta1 vor, die mit Ausnahme der neuen Menü-Funktion sehr stabil läuft. Dennoch ist es eine beta-Version, die man nicht (unbedingt) öffentlich, also live einsetzen sollte. Auch wird WordPress 3.0 erst bei den automatischen Updates angezeigt, wenn die Version als stabli zum Download veröffentlicht wird.
Daher geht man am besten wie folgt vor, will man gefahrenlos den eigenen Blog mit Erscheinen der stablien Version auf ein neues Level heben:

  1. Alles Unnötige aus der aktuellen Datenbank entfernen wie Spamkommentare, Artikelrevisionen, … beispielsweise mit dem Plugin Cleanup WordPress
  2. Backup der Datenbank und Backup der Serverdaten
  3. Geschützen Testbereich einrichten (lokales XAMPP – light tuts auch oder zugangsgeschützer Webserver)
  4. Datenbank und Dateien dorthin einrichten bzw. kopieren: Testbereich ist damit fertig
  5. Automatisches Update (der Testkopie!) auf Version 3.0-beta1 dank genialem Plugin WordPress Beta-Tester.
  6. Fertig, nach einem Datenbankupdate sollte der Blog wie bisher laufen – nur jetz in 3.0-beta1.

WordPress 3.0
Das an sich schöne graue Backend-Theme ist derzeit leider noch kontrastärmer als bisher (Vergleich bei Perun). Dank anregender Diskussionen könnte sich das aber bis zur stabilen Version noch bessern.

Custom Post Types

Wozu also das ganze? Angenommen man schreibt im Blog aktuelle Artikel und hat Seiten für Impressum etc. Will man nun eine dritte Art von Inhalten wie etwa einen Fragen und Antwort-Bereich (Q&A) hinzufügen, ginge das bislang auf zwei Arten.

  1. Man gliedert via functions.php im Theme bei den Artikel eine neue Kategorie Fragen aus dem Loop, Feed usw. aus.
  2. Man erstellt einfach weitere Seiten – hierarchisch unter einer grundlegenden Seite Fragen.

Die Sache mit der Kategorie wird spätestens bei der Navigation lästig und bei einer Funktionsänderung im Core droht dann Chaos. Bei den Seiten wird die Navigation auch komplex sowie – je nach Permalink-Struktur – WordPress zunehmend langsamer. Beginnt nämlich der Permalink nicht mit einem zahlenmäßigen Platzhalter (wie ID oder Datumsteile), sondern kommt als erster Platzhalter etwa die Kategorie oder der Titel, muss WordPress bei der Zuordnung des richtigen Inhaltes eine bei vielen Seiten sehr, sehr lange Tabelle abarbeiten. Viele Seiten sind also performancehemmend bei bestimmten Permalinkstrukturen.
Doch jetzt kann man via functions.php im Theme ganz einfach neue Arten von post (Artikel) oder pages (Seiten) in WordPress anlegen.

Custom Post Types anlegen

In der functions.php des WordPress-Themes geht das beispielsweise wie folgt:

function post_type_fragen() {
register_post_type(
           'fragen',
           array('label' => __('Fragen'),
           'singular_label' => __('Frage'),
           'public' => true,
           'show_ui' => true,
           'capability_type' => 'post',
           'hierarchical' => false,
           'rewrite' => array("slug" => "fragen"),
           'supports' => array('title','editor','trackbacks','custom-fields','comments','revisions'),
           'menu_position' => 4
           )
         );
}
add_action('init','post_type_fragen');

Entscheidend ist demnach die Funktion register_post_type (Parameter siehe Codex).
Damit legt man etwa Namen (Mehrzahl und Einzahl), Typ (Artikel oder Seite) und Felder fest. Im Backend passiert dann folgendes:
Custom Post Type in WordPress -Backend
Nun kann man neue Fragen genau bei Artikel oder Seiten (je nach gewähltem Typ) in dieser neuen Art erstellen. Die Frage wäre dann je nach Permalink-Struktur unter domain.de/fragen/fragentitel erreichbar.

Custom Post Types mit Kategorien und/ oder Tags

Wichtig zu wissen ist, dass diese benutzerdefinierten Inhaltstypen nicht die normalen Tags oder Kategorien nutzen können, welche den Artikeln vorbehalten bleiben.
Aber man kann sich ganz einfach selbst gleich spezielle Kategorien (hierarchische Taxonomy) und/ oder Tags (nicht hierarchische Taxonomy) für den neuen Typ (hier Fragen) anlegen.
WP Engineer zeigt das sehr anschaulich am Beispiel Filme, zu dem man Schauspieler-Kategorien (Actor) und Produktions-Tags (Production) anlegt:

function post_type_movies() {
  register_post_type(
                'movies',
                array(
                        'label' => __('Movies'),
                        'public' => true,
                        'show_ui' => true,
                        'supports' => array(
                                     'post-thumbnails',
                                     'excerpts',
                                     'trackbacks',
                                     'custom-fields',
                                     'comments',
                                     'revisions')
                )
        );
   register_taxonomy( 'actor', 'movies', array( 'hierarchical' => true, 'label' => __('Actor') ) );
        register_taxonomy( 'production', 'movies',
    array(
                         'hierarchical' => false,
       'label' => __('Production'),
       'query_var' => 'production',
       'rewrite' => array('slug' => 'production' )
    )
  );
}
add_action('init', 'post_type_movies');

Beim Erstellen erscheinen dann die Meta-Boxen rechts für die Schauspieler-Kategorien und Produktions-Tags.
Wem das jetzt alles zuviel Code ist, der sollte sich das Plugin aktivieren, das hierzu eine Benutzeroberfläche zum Zusammenklicken anbietet.

Custom Post Types im Backend erweitern

Custom Post Type
Für Fortgeschrittene und Perfektionisten kann man im Backend auch die Darstellung der Spalten noch weiter anpassen. Ein extremes Beispiel mit guten Erläuterungen findet man bei Konstantin.

Custom Post Types im Theme/ Template

Achtung! WordPress erstellt (derzeit) keinen rewrite-Eintrag für den Custom Post Type. Im obigen Beispiel würde also unter domain.de/fragen/ die 404-Fehlerseite erscheinen. Um eine logische Überblicksseite unter domain.de/fragen/ anzubieten, muss man daher derzeit am einfachsten auf eine normale Seite mit dem Slug fragen ausweichen.

Im Theme kann man mit if($post_type == 'fragen') ganz einfach abfragen, ob derzeit ein Inhalt des Custom Post Types Fragen angezeigt wird. Hat man dazu etwa die Custom Taxonomy Themen (als Kategorie oder Tags) vergeben, kann man diese mit if(is_tax('themen')) abfragen. Im Loop kann man die verwendeten Themen dann mit echo get_the_term_list($post->ID,'themen','Thema: ',', ',''); anzeigen.
Will man beispielsweise auch die Kommentare jeweils anpassen, funktioniert die Abfrage (außerhalb des Loops) nur, wenn man zuvor folgendes anfragt:

global $post;
$post_type = $post->post_type;

NETPROFIT Blog

Im Blog schreibt Robert Hartl         über CMS, SEO & Webdesign. Kontakt →

  • 148 Artikel – 551 Kommentare
  • RSS-Feed – 439 Abonnenten
  • Twitter – 110 Follower
Kategorien

Trackback-URL

6 Kommentare zu Custom Post Types ab WordPress 3.0 nutzen

Ihre Codeblöcke beinhalten kein ‘>’, wurde alles umgewandelt in &gt.

Gravatar von Uwe - via garvatar.org Uwe
Kommentar 1
29. April 2010 um 13:55 Uhr

Danke Uwe, wird gleich korrigiert, ist erst beim letzten Aktualisieren passiert.

Gravatar von Robert Hartl - via garvatar.org Robert Hartl
Kommentar 2
29. April 2010 um 13:58 Uhr

Wordpress wird immer genialer. Bin auch gerade am überlegen ob ich es mal ausprobieren sollte.
[Anmerkung Admin: Kommentarspam auf einem SEO-Blog - so unglaublich, dass ich den Kommentar schon wieder freischalten muss, bei dem bedauernswerten Namen natürlich ohne URL]

Gravatar von webkataloge eintragsdienst - via garvatar.org webkataloge eintragsdienst
Kommentar 3
2. Juli 2010 um 10:07 Uhr

Hallo, die Einrichtung hat dank dieser Anleitung super funktioniert.
Ich stehe allerdings vor dem Problem, dass ich den Slug nachträglich verändern möchte. Trotz Anpassen der functions.php ignoriert WordPress die neue Einstellung. Was kann ich tun?

Danke! Gruß Jürgen

Gravatar von Jürgen - via garvatar.org Jürgen
Kommentar 4
2. August 2010 um 16:00 Uhr

Gute Frage, schon die Permalinkstruktur im normalen Admin aktualisiert? Denn da liegt im Zweifel immer (nur) ein Update-Problem vor.

Gravatar von Robert Hartl - via garvatar.org Robert Hartl
Kommentar 5
2. August 2010 um 16:38 Uhr

@Robert: Ja, das habe ich bereits gemacht. Auch das Suchen und Ersetzen des alten Slugs in der Datenbank brachte nicht den gewünschten Erfolg. Es ist mir ein Rätsel, wo WordPress diese Information speichert.

Gruß

Gravatar von Jürgen - via garvatar.org Jürgen
Kommentar 6
2. August 2010 um 16:47 Uhr

Kommentar schreiben zu Custom Post Types ab WordPress 3.0 nutzen

Kommentare werden erst nach manueller Freischaltung sichtbar.

Kommentar

KommentatorIn

(erforderlich)

(erforderlich, wird nicht angezeigt)

(optional)

(erforderlich)

Firmianstraße 2a
D-94032 Passau

Tel.: +49 (0)851/ 966 31-31
Fax: +49 (0)851/ 966 31-41
E-Mail:

©  2001 − 2010  NETPROFIT  | Kontakt | AGB | Impressum