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

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.
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.
functions.php im Theme bei den Artikel eine neue Kategorie Fragen aus dem Loop, Feed usw. aus.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.
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');
domain.de/fragen/fragentitel erreichbar.
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');
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.
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;
Im Blog schreibt Robert Hartl über CMS, SEO & Webdesign. Kontakt →
Danke Uwe, wird gleich korrigiert, ist erst beim letzten Aktualisieren passiert.
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]
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
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.
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ß
Jürgen
Kommentar 6
2. August 2010 um 16:47 Uhr
Kommentare werden erst nach manueller Freischaltung sichtbar.
Firmianstraße 2a
D-94032 Passau
Tel.: +49 (0)851/ 966 31-31
Fax: +49 (0)851/ 966 31-41
E-Mail: kontakt@netprofit.de
Ihre Codeblöcke beinhalten kein ‘>’, wurde alles umgewandelt in >.
Kommentar 1
29. April 2010 um 13:55 Uhr