Custom Post Types

15. März 2018 Keller-H 0 Kommentare

WordPress bietet von Haus aus zwei Typen von Posts, Seiten und Beiträge. Mit den Custom Post Types kann man nun beliebige viele eigene Typen hinzufügen. Diese können noch mit eigenen Taxonomien versehen, und besonders einfach individuell gestaltet werden.

Um einen benutzerdefinierten Typ zu erstellen, wird in der functions.php die Funktion register_post_type benötigt. Mit register_taxonomy erhält der neue Typ eigene Taxonomien. Diese sind den Kategorien der Beiträge vergleichbar und werden auch ähnlich behandelt.

Das folgende Beispiel registriert einen Custom Post Type „portrait“ und eine zugehörige Taxonomie „properties“.

function my_theme_init() {
   register_post_type('portrait', array( 
      'label' => 'Portrait',
      'public' => true,
      'supports' => array( 
         'title',
         'editor',
         'thumbnails',
         'custom-fields',
         'revisions',
         'page-attributes',
         'post-formats',
         'comments'
      )
   ) );
 
   register_taxonomy('properties', 'portrait', array( 
      'hierarchical' => true,
      'label' => 'Eigenschaften',
      'show_ui' => true,
      'update_count_callback' => '_update_post_term_count',
      'query_var' => 'properties',
      'rewrite' => array( 'slug' => 'properties' )
   ) );
}
add_action ('init', 'my_theme_init');

Der Typ „portrait“ wird in die Suchfunktion einbezogen, im Backend unter „Portrait“ angezeigt und unterstützt die im Array supports angegebenen Eigenschaften. Zusätzlich erhält er eine hierarchische Taxonomie „properties“, die im Backend unter Portrait Eigenschaften zu finden ist.

Verwendung im Theme

Posts eines benutzerdefinierten Typs können nun genauso angelegt werden wie Beiträge. Zugeordnete Taxonomien werden im Backend wie Kategorien behandelt. Der eigentliche Vorteil liegt neben der organisatorischen Abgrenzung zu Beiträgen und Seiten im einfachen Styling der Post. WordPress sucht bei der Anzeige eines benutzerdefinierten Types nach einem Template single-custom_type.php, im Beispiel also nach single-portrait.php und nutzt dieses anstatt der single.php bzw. index.php.

Die zugeordneten Taxonomien erhält man über die Funktion
get_the_term_list( $post->ID, 'properties', '<ul class="styles"><li>', ',</li><li>', '</li></ul>' );. Die Funktion muss innerhalb der Loop aufgerufen werden und liefert im Beispiel die zugehörigen Taxonomien als Liste formatiert.