Erstellen eines benutzerdefinierten Post-Type (Custom Post Type) in WordPress: Ein umfassender Leitfaden mit PHP-Beispielen

Marc Wag­ner

Sep­tem­ber 5, 2024

4 min read|

Word­Press ist bekannt für sei­ne Fle­xi­bi­li­tät und Erwei­ter­bar­keit. Das Erstel­len eines benut­zer­de­fi­nier­ten Post-Types (Cus­tom Post Types) gehört auch zu eben die­ser Fle­xi­bi­li­tät. Die­se erlau­ben es dir, über die stan­dard­mä­ßi­gen Inhal­te wie Bei­trä­ge und Sei­ten hin­aus spe­zi­fi­sche Inhal­te anzu­le­gen. Wenn du z. B. eine Web­site für Fil­me erstellst, kannst du einen eige­nen Post-Typ für Fil­me anle­gen, der sich von nor­ma­len Blog­bei­trä­gen unter­schei­det.

In die­sem Blog­ar­ti­kel zei­gen wir dir, wie du mit PHP einen Cus­tom Post Type in Word­Press erstellst, wie du ihn regis­trierst und wor­auf du ach­ten musst.

Was ist ein Custom Post Type? #

Word­Press ver­wen­det stan­dard­mä­ßig ver­schie­de­ne Post-Typen wie Bei­trä­ge (post), Sei­ten (page) und Medi­en (attachment). Mit Cus­tom Post Types kannst du die­se Lis­te erwei­tern, um benut­zer­de­fi­nier­te Inhal­te zu ver­wal­ten, wie z. B. Port­fo­li­os, Pro­duk­te, Rezep­te oder Events.

Erstellen eines benutzerdefinierten Post-Types in WordPress #

Voraussetzungen

Bevor wir star­ten, stel­le sicher, dass du:

  • Zugriff auf die functions.php-Datei dei­nes The­mes hast oder ein benut­zer­de­fi­nier­tes Plug­in ver­wen­dest.
  • Grund­le­gen­de Kennt­nis­se in PHP und Word­Press besitzt.

Schritt 1: Custom Post Type registrieren

Um einen benut­zer­de­fi­nier­ten Post-Typ zu erstel­len, ver­wen­dest du die Word­­Press-Fun­k­­ti­on register_post_type(). Die­se Funk­ti­on regis­triert den neu­en Post-Typ und ermög­licht es dir, Para­me­ter wie Bezeich­nung, Dar­stel­lung und Funk­tio­na­li­tät zu defi­nie­ren.

PHP-Beispiel: Custom Post Type “Filme”

Hier ist ein Bei­spiel dafür, wie du einen Cus­tom Post Type für Fil­me erstellst:

// Custom Post Type für Filme registrieren
function cpt_filme() {

    $labels = array(
        'name'               => _x( 'Filme', 'post type general name', 'textdomain' ),
        'singular_name'      => _x( 'Film', 'post type singular name', 'textdomain' ),
        'menu_name'          => _x( 'Filme', 'admin menu', 'textdomain' ),
        'name_admin_bar'     => _x( 'Film', 'add new on admin bar', 'textdomain' ),
        'add_new'            => _x( 'Neuen Film hinzufügen', 'Film', 'textdomain' ),
        'add_new_item'       => __( 'Neuen Film hinzufügen', 'textdomain' ),
        'new_item'           => __( 'Neuer Film', 'textdomain' ),
        'edit_item'          => __( 'Film bearbeiten', 'textdomain' ),
        'view_item'          => __( 'Film ansehen', 'textdomain' ),
        'all_items'          => __( 'Alle Filme', 'textdomain' ),
        'search_items'       => __( 'Filme durchsuchen', 'textdomain' ),
        'not_found'          => __( 'Keine Filme gefunden', 'textdomain' ),
        'not_found_in_trash' => __( 'Keine Filme im Papierkorb gefunden', 'textdomain' )
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'filme' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'supports'           => array( 'title', 'editor', 'excerpt', 'thumbnail', 'comments' ),
    );

    register_post_type( 'filme', $args );
}

add_action( 'init', 'cpt_filme' );

Erklärung des Codes

  1. Labels: Hier defi­nierst du die Bezeich­nun­gen, die im Backend ange­zeigt wer­den, z. B. in der Admin-Navi­­ga­­ti­on oder beim Erstel­len eines neu­en Bei­trags.
    • name: All­ge­mei­ner Name für die gesam­te Post-Typ-Grup­­pe.
    • singular_name: Sin­gu­lar­na­me, der in der Benut­zer­ober­flä­che ver­wen­det wird.
    • add_new: Bezeich­nung des But­tons zum Hin­zu­fü­gen neu­er Inhal­te.
  2. Args: Dies sind die Argu­men­te, die die Funk­ti­ons­wei­se des Cus­tom Post Types bestim­men.
    • public: Gibt an, ob der Post-Typ öffent­lich zugäng­lich ist.
    • publicly_queryable: Macht den Post-Typ über die URL ansprech­bar.
    • rewrite: Bestimmt den URL-Slug (in die­sem Fall „fil­me“).
    • supports: Defi­niert die Stan­­dard-Edi­­tor-Optio­­nen, die für den Post-Typ unter­stützt wer­den (z. B. Titel, Edi­tor, Thumb­nail etc.).
  3. register_post_type(): Die­se Funk­ti­on regis­triert den Post-Typ in Word­Press.
  4. add_action(‘init’, ‘cpt_filme’): Der Post-Typ wird regis­triert, wenn Word­Press initia­li­siert wird.

Schritt 2: Den Custom Post Type im Admin-Bereich sichtbar machen

Nach­dem du den Post-Typ erstellt hast, soll­te er im Word­­Press-Dash­­board im Menü sicht­bar sein. Dort kannst du neue “Fil­me” hin­zu­fü­gen und ver­wal­ten, ähn­lich wie nor­ma­le Bei­trä­ge.

Schritt 3: Archivseiten und Vorlagen anpassen

Um die Archiv­sei­ten oder Ein­zel­an­sich­ten dei­nes Cus­tom Post Types zu steu­ern, kannst du spe­zi­el­le Tem­p­la­­te-Datei­en in dei­nem The­me erstel­len:

  • archive-filme.php: Die­se Datei steu­ert die Anzei­ge der Archiv­sei­te des Cus­tom Post Types.
  • single-filme.php: Die­se Datei steu­ert die Anzei­ge ein­zel­ner Bei­trä­ge dei­nes Cus­tom Post Types.

Falls die­se Datei­en nicht vor­han­den sind, ver­wen­det Word­Press die Stan­dard­vor­la­gen archive.php und single.php.

Bonus: Taxonomien hinzufügen

Um dei­nen Cus­tom Post Type wei­ter zu ver­bes­sern, kannst du auch benut­zer­de­fi­nier­te Taxo­no­mien (ähn­lich wie Kate­go­rien und Tags) hin­zu­fü­gen:

function create_filme_taxonomy() {
    register_taxonomy(
        'genre',
        'filme',
        array(
            'label' => __( 'Genre' ),
            'rewrite' => array( 'slug' => 'genre' ),
            'hierarchical' => true, // ähnlich wie Kategorien
        )
    );
}

add_action( 'init', 'create_filme_taxonomy' );

Fazit #

Mit benut­zer­de­fi­nier­ten Post-Typen kannst du Word­Press so anpas­sen, dass es für jede Art von Web­site funk­tio­niert – sei es eine Por­t­­fo­­lio-Web­­si­te, ein Blog, ein Online-Shop oder eine Film­sei­te. Der obi­ge Code gibt dir die Werk­zeu­ge an die Hand, um eige­ne Post-Typen zu erstel­len und anzu­pas­sen.

Wenn du noch mehr Funk­tio­na­li­tät benö­tigst, kannst du Plug­ins wie “Cus­tom Post Type UI” ver­wen­den, um den Pro­zess wei­ter zu ver­ein­fa­chen. Aber mit ein wenig PHP-Kenn­t­­nis­­sen kannst du mit register_post_type() dei­ne eige­nen Post-Typen ganz nach dei­nen Bedürf­nis­sen erstel­len.

Viel Spaß beim Erstel­len dei­nes eige­nen Cus­tom Post Types in Word­Press!

88e86fcb816eff22bc917094df2862d8dd5c0e978b333e6dd5f36f808990c261 96

Arti­kel von:

Marc Wag­ner

Hal­lo, Marc hier. Ich bin der Grün­der von Forge12 Inter­ac­ti­ve und bereits seit über 20 Jah­ren lei­den­schaft­lich dabei Web­sei­ten, Online­shops, Anwen­dun­gen und SaaS-Lösun­gen für Unter­neh­men zu ent­wi­ckeln. Vor der Grün­dung habe ich bereits in Bör­sen notier­ten Unter­neh­men gear­bei­tet und mir aller­lei Wis­sen ange­eig­net. Die­ses Wis­sen möch­te ich nun an mei­ne Kun­den wei­ter­ge­ben.

Hast du eine Fra­ge? Hin­ter­lass bit­te einen Kom­men­tar