WordPress Custom Post Type (Plugin)

Wordpress Custom Post Type Plugin
In unserem früheren Beitrag haben wir versucht zu erläutern nach welchem Prinzip verschiedene Post-Typen erstellt werden können. Als Optimierung haben wir diese Codezeilen nun in ein Plugin ausgelagert, welches dann unabhängig vom eingesetzten Theme genutzt werden kann.

Vorwort

Ein WordPress Custom Post Type Plugin ist recht schnell geschrieben. Dazu setzen wir eine funktionierende WordPress-Installation voraus. Hier wollen wir das Plugin später installieren. Außerdem ein Editor der Wahl mit welchem wir das Plugin selbst schreiben. In der Regel genügt dafür ein Editor wie Notpad oder wer es etwas eleganter mag, kann auch eine IDE wie Netbeans nutzen.

Ein eigenes Plugin erstellen

Am Anfang erstellen wir einen Ordner namens /custom-post-type/ und darin zusätzlich die Datei custom-post-type.php. Alle Dateien fassen wir später in dem Plugin-Archiv zusammen.

Die Datei custom-post-type.php beginnt mit verschiedenen Kommentaren, welche später von WordPress ausgelesen und dargestellt werden.

/**
 * Plugin Name: Mein Plugin
 * Plugin URI: http://meinedomain.de
 * Description: Eine kurze Beschreibung des Plugins
 * Version: 1.0
 * Author: Max Mustermann
 */

Die Angaben sind selbsterklärend und erscheinen nach der Installation im Plugin-Verzeichnis unserer Installation.

Custom Post Type (CPT) erstellen

Nun widmen wir uns dem Inhalt des Plugins und füllen es mit Funktionen. Dazu beginnen wir mit dem Registrieren des neuen CPT und der dazugehörigen Kategorien.

/**
 * Create custom post type and categories
 */
function custom_post_type_example()
{
    register_post_type( 
        'example', 
        array(
            'labels' => array(
                'name' => __( 'Examples', 'ts' ),
                'singular_name' => __( 'Example', 'ts' ),
                'all_items' => __( 'All examples', 'ts' ),
                'add_new' => __( 'Create', 'ts' ),
                'add_new_item' => __( 'Add example', 'ts' ),
                'edit_item' => __( 'Edit example', 'ts' ),
                'new_item' => __( 'New example', 'ts' ),
                'view_item' => __( 'View example', 'ts' ),
                'items_archive' => __( 'Example archive', 'ts' ),
                'search_items' => __( 'Search example', 'ts' ),
                'not_found' => __( 'No example found', 'ts' ),
                'not_found_in_trash' => __( 'No example found in trash', 'ts' ),
                'parent_item_colon' => __( 'Parent example', 'ts' )
            ),
            'description' => __( 'An example for a custom post type', 'ts' ),
            'public' => true,
            'show_ui' => true,
            'menu_position' => 5,
            'hierarchical' => true,
            'supports' => array(
                'title',
                'editor',
                'thumbnail',
                'page-attributes',
                'post-formats'
            ),
            'rewrite' => true,
            'query_var' => 'example'
        ) 
    );
    register_taxonomy( 
        'example_categories', 
        'example', 
        array(
            'hierarchical' => true,
            'show_admin_column' => true,
            'labels' => array(
                'name' => __( 'Categories', 'ts' ),
                'singular_name' => __( 'Category', 'ts' ),
                'all_items' => __( 'All categories', 'ts' ),
                'edit_item' => __( 'Edit category', 'ts' ),
                'view_item' => __( 'View category', 'ts' ),
                'update_item' => __( 'Update category', 'ts' ),
                'add_new_item' => __( 'Add new category', 'ts' ),
                'new_item_name' => __( 'New category', 'ts' ),
                'parent_item' => __( 'Parent category', 'ts' ),
                'search_items' => __( 'Search category', 'ts' )
            ),
            'query_var' => 'example-category',
            'rewrite' => true
        ) 
    );
}

Nähere Informationen zu den einzelnen Parametern findet man in der Funktion-Referenz von WordPress. Deshalb beschränken wir uns in der Erläuterung nur auf wenige Punkte.

Zeile 7-40:
Hier wird der Custom Post Type erstellt und konfiguriert.
Zeile 33:
Der Parameter „thumbnail“ ermöglicht das Nutzen von Beitragsbildern. Dazu ist es aber notwendig, dass das genutzte Theme dies auch unterstützt. Mehr zu Post Thumbnails
Zeile 41-62:
Hier erstellen und konfigurieren wir die Kategorien zu diesem CPT.

Widget für den CPT erstellen

Nachdem der neue Beitragstyp erstellt wurde, wollen wir noch ein Widget erstellen, welches sich dann über die Sidebar einbinden lässt. Dieses Widget soll uns alle verwendeten Kategorien unseres neuen Beitragstypen anzeigen. Dazu schreiben wir ein neue Klasse namens example_categories_widget. Diese Klasse erweitert die WordPress-Eigene Klasse WP_Widget und besteht aus 4 Methoden.

/**
 * Widget: example categories
 */
class example_categories_widget extends WP_Widget
{
    function example_categories_widget()
    {
        parent::WP_Widget(
            false,
            $name = __( 'Example categories', 'ts' ),
            array( 'description' => __( 'Categories of custom post type example' , 'ts' ) )
        );
    }
    function widget( $args, $instance )
    {
        $cache = wp_cache_get( 'widget_example_categories', 'widget' );
        if ( !is_array($cache) ) $cache = array();
        if ( !isset( $args['widget_id'] ) ) $args['widget_id'] = $this->id;
        if ( isset( $cache[ $args['widget_id'] ] ) )
        {
                echo $cache[ $args['widget_id'] ];
                return;
        }
        ob_start();
        extract( $args );
        $title = apply_filters( 
                'widget_title', 
                empty( $instance['title'] ) 
                        ? __( 'Example categories', 'ts' ) 
                        : $instance['title'], 
                $instance, 
                $this->id_base 
        );
        if ( $title ) echo $title;
        echo '<ul id="widget-example-categories">';
        $catargs = array(
                'orderby' => 'name',
                'hierarchical' => true,
                'taxonomy' => 'example_categories',
                'title_li' => ''
        );
        wp_list_categories( $catargs );
        echo '</ul>';
        // Reset the global $the_post as this query will have stomped on it
        wp_reset_postdata();
        $cache[ $args['widget_id'] ] = ob_get_flush();
        wp_cache_set( 'widget_example_categories', $cache, 'widget' );
    }
    function update( $new_instance, $old_instance )
    {
        $instance = $old_instance;
        $instance['title'] = strip_tags( $new_instance['title'] );
        return $instance;
    }
    function form( $instance )
    {
        $default_settings = array( 'title' => __( 'Example categories', 'ts' ) );
        $instance = wp_parse_args( (array) $instance, $default_settings );
        echo '<p>';
        echo '<label for="' . $this->get_field_id( 'title' ) . '">' . __( 'Title:', 'ts' ) . '</label>';
        echo '<input id="' . $this->get_field_id( 'title' ) . '" name="' . $this->get_field_name( 'title' ) . '" value="' . $instance['title'] . '" style="width:100%;" />';
        echo '</p>';
    }
}

Die Methode example_categories_widget() initialisiert die WordPress-Widget-Klasse mit unseren Parameters. Dazu übergeben wir lediglich den Namen und die Beschreibung unseres Widgets. Die Methode widget() ist für die Anzeige des Widgets, z.B. in der Sidebar zuständig. update() ermöglicht das Bearbeiten von Widget-Parametern wie Name und Beschreibung. Zuletzt übernimmt die Methode form() dass Erfassen von geänderten Paremetern im Administrationsbereich.

CPT und Widgets initialisieren

Nun muss sowohl der Custom Post Type als auch das Widget initialisiert werden. Dazu nutzen wir 2 verschiedene Hooks in WordPress. Zuvor muss unser Widget aber noch in einer separaten Funktion registriert werden.

/**
 * Init widgets
 */
function init_custom_widget()
{
    register_widget( 'example_categories_widget' );
}

Danach sorgen diese 2 Zeilen dafür, dass uns der neue Beitragstyp und das Widget im Admin-Bereich zur Verfügung stehen.

// initialize custom post type and widgets with a hook
add_action( 'init', 'custom_post_type_example' );
add_action( 'widgets_init', 'init_custom_widget' );

Das Plugin installieren

Damit haben wir das Plugin fertig und können es nun packen und installieren. Dazu zippen wir den Ordner /custom-post-type/ zu einem Archiv namens Custom-Post-Type.zip. Dieser lässt sich nun in unserer WordPress-Installation hochladen und installieren. Nach der Aktivierung unseres Plugins steht uns der neue Custom Post Type und das Widget in jedem installierten Theme zur Verfügung.

Plugin herunterladen

Wir haben die Beispiel-Dateien hier zum Download gestellt. » [Download] «


Trackbacks

Diesen Artikel in einem sozialen Netzwerk teilen

Folgen Sie uns auf Twitter oder abonnieren Sie unseren RSS-Feed um keine Artikel zu verpassen.

Support

Wir sind aktuell nicht online. Aber Sie können uns eine E-Mail senden und wir werden uns umgehend bei Ihnen melden.

Wir sind gern für Sie da.

Nachricht mit ENTER bestätigen