PHP / MySQL / Podcast / WordPress

Custom-Post-Types in WordPress mit eigener Taxonomie – mit Video-Training

Custom-Post-Types in WordPress

Seit WordPress 3.0 besteht die Möglichkeit, dass man sich eigene Inhalts-Typen (sogenannte Custom-Post-Types) in Plugins oder in der functions.php seines eigenen Themes definieren kann. Custom-Post-Types gehören generell zu den interessantesten Neuerungen, die mit WordPress 3.0 eingeführt wurden, denn sie ermöglichen es jedem Plugin- oder Theme-Entwickler auf eigene Inhalts-Typen zurückzugreifen, die wie Seiten oder mit eigener Taxonomie wie Artikel behandelt werden können.

In diesem Tutorial möchte ich euch genau erklären wie ihr Custom-Post-Types verwendet, weiterhin findet ihr am Ende noch ein 40 minütiges Video-Training zu Custom-Post-Types, dieses entstammt meinem neuen WordPress-Video-Training.

Was sind Custom-Post-Types und wie funktionieren sie …

Stellen wir uns einmal vor, wir haben eine einfache Webseite von einer kleinen Firma: Die Webseite verfügt über einen Blog-Bereich (hier kommen Artikel und Kategorien zum Einsatz) und einige normale Seiten, wie z.B. Über uns, Partner, Kontakt und Impressum, diese Einzelseiten werden natürlich über die “Seiten” Funktion von WordPress verwaltet.

Nun möchte der Seitenbetreiber neben den zwei Bereichen, Artikel und Seiten, noch einen weiteren Bereich Produkte in dem er nach Kategorien sortiert seine Produkte auflisten kann. Hier könnte man zwar die Artikel-Funktion missbrauchen, dass würde in diesem Fall aber nicht funktionieren, da diese ja bereits regulär für den Blog verwendet wird.

Genau hier würden nun Custom-Post-Types ins Spiel kommen, die prinzipiell genau so aufgebaut sind wie die Artikel in WordPress. Stellt auch also einfach vor ihr hättet eine zweite Artikel Funktion, die allerdings auch direkt Produkte heißt und einen eigenen Menüpunkt im Backend hat. Weiterhin sind die Artikel, die über den Custom-Post-Type Produkte eingefügt wurden, völlig unabhängig von den eigentlichen Artikeln.

Um das ganze etwas besser zu verdeutlichen seht euch einmal den beigefügten Screenshot an:

Custom-Post-Types in WordPress mit eigener Taxonomie – Produktverwaltung

Auf dem Screenshot ist der in einem Plugin angelegte Custom-Post-Type Produkt zu sehen.

Tipp: Custom-Post-Types können auch für komplexere Funktionen verwendet werden, wie z.B. die Verwaltung einer Slideshow. Ein gutes Beispiel ist hier der NivoSlider, dessen Backend ebenfalls auf einem Custom-Post-Type basiert.

Custom-Post-Types als Plugin oder im Theme (functions.php)

Es gibt zwei Möglichkeiten Custom-Post-Types anzulegen, zum einen in der functions.php des aktiven Themes oder in einem einfachen kleinen Plugin. Beide Varianten haben wichtige Vor- und Nachteile.

Wann sollte man Custom-Post-Types in der functions.php definieren
Es macht nur dann Sinn Custom-Post-Types in einem Theme direkt in der functions.php zu definieren, wenn es sich dabei um Theme relevante Post-Types handelt, wie z.B. für eine Slideshow. Denn stellen wir uns einmal vor, wir würden die Produktverwaltung mit dem Theme verbinden und irgendwann das Theme wechseln, so wäre auch die Produktverwaltung wieder verschwunden. Man müsste nun die Custom-Post-Type Definition manuell in die functions.php des neuen Themes übernehmen, dass wäre nicht wirklich komfortabel.

Wann sollte man Custom-Post-Types in einem extra Plugin definieren
Wenn es sich um Inhaltsbezogene Post-Types handelt, die nicht direkt mit dem Theme zusammenhängen wie z.B. die Produktverwaltung. So kann man das Theme wechseln so oft man will, ohne das dies direkten Einfluss auf die definierten Custom-Post-Types hat.

Wie werden Custom-Post-Types in einem Theme definiert:
Falls noch nicht vorhanden legt euch einfach in eurem Theme Ordner ( /wp-content/themes/EUER-THEME-NAME/ ) eine neue PHP Datei namens functions.php an, dort könnt ihr dann die folgenden Funktion reinschreiben.

Wie werden Custom-Post-Types in einem Plugin definiert:
Legt euch in eurem Plugins Ordner ( /wp-content/plugins/ ) eine neue PHP Datei an, wie ihr diese Datei nennt bleibt euch überlassen. In diesem Beispiel nennen wir sie einfach passend zur Produktverwaltung products.php. Die products.php muss folgende Angaben beinhalten:

<?php
/*
Plugin Name: Produktverwaltung
Plugin URI: http://www.pascal-bajorat.com
Description: Eine einfache Produktverwaltung auf Custom-Post-Type Basis mit Kategoriemanagement. Dieses Plugin dient als Beispiel für Custom-Post-Types und muss noch weiter angepasst werden.
Author: Pascal Bajorat
Version: 1.0.0
Author URI: http://www.pascal-bajorat.com
*/
 
?>

Ersetzt einfach die Daten aus dem Beispiel mit den euren.

Tipp: Noch mehr interessante WordPress Workshops findet ihr in meinem neuen WordPress-Video-Training.

Wie werden Custom-Post-Types angelegt

Um in WordPress Custom-Post-Types anzulegen wird die Funktion register_post_type() verwendet, schaut euch das folgende Beispiel aus der Produktverwaltung an:

<?php
// WordPress Hook der die Funktion "create_post_type" beim initialisieren von WordPress aufruft
add_action( 'init', 'create_post_type' );
 
// Selbst definierte Funktion die wir oben an den Hook übergeben
function create_post_type()
{
// register_post_type( 'Name des Post-Types', 'Weitere Optionen als array' );
   register_post_type( 'product',
      array(
         /* Labes definieren die Ausgaben im Backend */
         'labels' =--> array(
         'name' =&gt; __('Produkte'),
         'singular_name' =&gt; __('Produkt'),
         'add_new' =&gt; __('Neues Produkt hinzufügen'),
         'add_new_item' =&gt; __('Neues Produkt hinzufügen'),
         'edit_item' =&gt; __('Produkt bearbeiten'),
         'new_item' =&gt; __('Neues Produkt'),
         'all_items' =&gt; __('Alle Produkte'),
         'view_item' =&gt; __('Produkt ansehen'),
         'search_items' =&gt; __('Produkt suchen'),
         'not_found' =&gt;  __('Keine Produkte gefunden'),
         'not_found_in_trash' =&gt; __('Keine Produkte im Papierkorb gefunden'),
         'menu_name' =&gt; __('Produkte')
      ),
      'public' =&gt; true,
      'publicly_queryable' =&gt; true,
      'show_ui' =&gt; true,
      'menu_position' =&gt; 5,
      'hierarchical' =&gt; true,
      /* Hier kann ein eigener URL Slug definiert werden, quasi die Permalink Struktur des Post-Types - hier www.domain.de/produkt/artikelname/ */
      'rewrite' =&gt; array('slug' =&gt; 'produkt'),
      /* Funktionen des Editors */
      'supports' =&gt; array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields', 'page-attributes' )
   )
   );
}
?>

Die Argumente die dem Post-Type mit übergeben werden sind eigentlich selbsterklärend, eine genaue Liste der Post-Type Funktionen ist in der WordPress Dokumentation zu finden:
http://codex.wordpress.org/Function_Reference/register_post_type#Arguments

Mit der oben gezeigten Funktion lassen sich einfache Post-Types anlegen die vom Funktionsprinzip den Seiten in WordPress ähneln. Um der Produktverwaltung nun noch Kategorien hinzufügen zu können, muss eine eigene Taxonomie für diesen Post-Type angelegt werden.

Taxonomie für Custom-Post-Types anlegen

Um eine Taxonomie zu erzeugen, wird die Funktion register_taxonomy() verwendet:

// WordPress Hook der die Funktion "create_product_taxonomies" beim initialisieren von WordPress aufruft
add_action( 'init', 'create_product_taxonomies', 0 );
 
// Selbst definierte Funktion die wir oben an den Hook übergeben
function create_product_taxonomies()
{
 
// Die Labels sind für die Ausgaben im Backend zuständig
  $labels = array(
    'name' =&gt; __( 'Kategorien' ),
    'singular_name' =&gt; __( 'Kategorie' ),
    'search_items' =&gt;  __( 'Kategorien durchsuchen' ),
    'all_items' =&gt; __( 'Alle Kategorien' ),
    'parent_item' =&gt; __( 'Hauptkategorie' ),
    'parent_item_colon' =&gt; __( 'Hauptkategorie:' ),
    'edit_item' =&gt; __( 'Kategorie bearbeiten' ),
    'update_item' =&gt; __( 'Kategorie aktualisieren' ),
    'add_new_item' =&gt; __( 'Neue Kategorie hinzufügen' ),
    'new_item_name' =&gt; __( 'Neue Kategorie Name' ),
    'menu_name' =&gt; __( 'Kategorien' ),
  );
 
// Name der Taxonomie - array('product') verbindet diese Taxonomie mit dem Post-Type product
  register_taxonomy('product_category',array('product'), array(
    'hierarchical' =&gt; true,
    'labels' =&gt; $labels,
    'show_ui' =&gt; true,
    'query_var' =&gt; true,
    'rewrite' =&gt; array( 'slug' =&gt; 'kategorie' ),
  ));
 
}

Die genauen Informationen zu den Argumenten könnt ihr der WordPress Dokumentation entnehmen: http://codex.wordpress.org/Function_Reference/register_taxonomy#Arguments

So einfach lassen sich Custom-Post-Types definieren, falls ihr weitere Informationen benötigt seht euch das folgende Video-Training an. In dem Video-Training wird auch gezeigt, wie die Post-Types im Theme wieder ausgegeben werden.

Custom-Post-Type im Theme ausgeben

Um Custom-Post-Types im Theme auszugeben wird folgender modifizierter Content-Loop benötigt:

<?php
$args = array( 'post_type' => 'product' );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
?>
 
<?php the_title(); ?>
<?php the_content(); ?>
 
<?php endwhile; ?>

Custom-Post-Types Video-Training

custom-post-typesSeit der WordPress-Version 3.0 gibt es die Möglichkeit, sogenannte Custom-Post-Types zu definieren. Bei diesen Custom-Post-Types handelt es sich um Inhaltsarten, die mit Artikeln vergleichbar sind, sie lassen sich allerdings einzeln im Theme abrufen und sind so flexibler für eigene Inhalte.

So lassen sich z.B. neben Artikeln auch DVD-Sammlungen, Bücher-Listen oder Mitglieder-Verwaltungen realisieren.

Weitere Informationen zu Custom-Post-Types gibt es unter: http://codex.wordpress.org/Post_Types#Custom_Types

Podcast Info:
Titel: Custom-Post-Types – was ist das, wozu kann man sie verwenden und wie funktionieren sie
Autor: Pascal Bajorat
Länge: 40 Min
Dateigröße: 280 MB

Das Video ist ein Teil meins achtstündigen WordPress-Video-Trainings.

Video auf Vimeo ansehen…

Flattr uns...
Wenn du ein Flattr Konto hast und dir dieser Artikel gefallen hat, kannst du uns mit einer kleinen Spende unterstützen. Kein Flattr Account? Hier gibt es mehr Infos zu Flattr.

flattr this!

Ein Kommentar zu “Custom-Post-Types in WordPress mit eigener Taxonomie – mit Video-Training”

Hinterlasse eine Antwort

Email-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.