WordPress Custom Post Types im Einsatz

Da ich für unser Freelancer Netzwerk eine einfache Möglichkeit gesucht habe, die Inhalte der Seite bei jedem neuen Seitenaufruf in zufälliger Reihenfolge rotieren zu lassen, habe ich mich für die Umsetzung mit Custom Post Types entschlossen. Die Verwendung von Custom Post Types erlaubt es mir zukünftig auch, neue Freelancer leicht auf der Seite aufnehmen zu können. Hier ein kleiner Erfahrungsbericht meiner Umsetzung.

1. Custom Post Types in der functions.php definieren

Im ersten Schritt musst du die Custom Post Types-Funktion in der functions.php Datei deinem Theme festlegen. Für die Freelancer-Netzwerk habe ich dafür den folgenden Code eingesetzt:

add_action( 'init', 'create_post_type' );

function create_post_type() {
	register_post_type( 'freelancer-netzwerk',
		array(
			'labels' => array(
			'name' => __( 'Freelancer' ),
			'singular_name' => __( 'Freelancer' )),
			'public' => true,
			'has_archive' => true,
			'rewrite' => array('slug' => 'freelancer')
		)
	);
}

Das von mir genutzte Beispiel registriert den neuen Post Type „Freelancer“. Mit public true definiere ich, dass der Post Type öffentlich ist und im Adminbereich angezeigt wird. has_archive true bestimmt, dass es ein Archiv für den Post Type gibt und mit Hilfe des Parameteres rewrite kann ich die URL-Struktur meiner Post Types beeinflussen.

Detaillierte Infos zu den vielen Parametern, die du für dein Custom Post Type nutzen kannst, findest du im WordPress Codex.

2. Neue Post Types anlegen

Jetzt siehst du deinen neuen Post Type schon in deinem WordPress-Adminbereich und kannst damit beginnen einzelne Beiträge für den neuen Post Type anzulegen. Im meinem Beispiel habe ich also einfach für jeden Freelancer einen neuen Freelancer-Beitrag angelegt. Auf diese Weise erhalte ich auch eine übersichtliche Auflistung aller Freelancer.

WordPress Custom Post Types im Einsatz
Die neuen Custom Post Types im Adminbereich.

3. Eine Übersichtsseite für alle Post Types

Da ich ja alle Freelancer auf einer gemeinsamen Übersichtsseite anzeigen möchte, benötige jetzt noch ein neues Seiten-Template, das alle Post Types des Freelancer-Netzwerkes ausliest. Für das neue Seiten-Template habe ich mir die page.php Datei meines Themes als Vorbild genommen.

In der Beschreibung der neuen Seite namens page-netzwerk.php gebe ich folgende Info an:

<?php
/**
 * Template Name: Netzwerk
 * Description: The freelancer netzwerk template
 *
 * @package Waipoua
 * @since Waipoua 1.0
 */

get_header(); ?>

Über den Template Name kann ich später im Adminbereich eine neue WordPress-Seite mit der Template-Struktur „Netzwerk“ anlegen.

WordPress Custom Post Types im Einsatz
Eine neue Seite für die Anzeige der Custom Post Types anlegen.

Um jetzt nur die Post Type auf dieser neuen Seite page-netzwerk.php auszulesen, nutze ich WP_Query und den Parameter post_type:

<ul class="freelancer">
<?php $args = array( 'post_type' => 'freelancer-netzwerk', 'posts_per_page' => 30, 'orderby' => 'rand' );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
	echo '<li>';
	the_title('<h3>', '</h3>');
	the_content();
	echo '</li>';
endwhile; ?>
</ul><!-- end .freelancer -->

Mit Hilfe des post_tpye Parameters kann ich bestimmen, welche Post Types ausgelesen werden sollen. Da ich die Anzeige der Freelancer zufällig rotieren lassen möchte, gebe ich außerdem orderby rand an. Die Anzahl der Post Types lässt sich mit dem posts_per_page bestimmen.

Eine genauere Erklärung zur Verwendung von WP_Query für Post Types findest du auch im WordPress Codex. Hilfreich ist außerdem der Eintrag „Interacting with WP_Query“ im Codex, hier findest du eine ausführliche Beschreibung möglicher Parameter für die Nutzung.

In vielen Fällen wirst du noch einige individuellen CSS-Eigenschaften für das Styling deiner neuen Post Type-Seite anlegen müssen. Ich habe lediglich die Breite der einzelnen Freelancer-Einträge bestimmt und die Schriftgrößen etwas angepasst.

4. Das fertige Ergebnis

Mit dem Ergebnis auf der Freelancer Netzwerk-Seite bin ich sehr zufrieden. Alles in allem ist die Nutzung nicht kompliziert und es gibt meiner Ansicht etliche praktische Einsatzmöglichkeiten für WordPress Custom Post Types.

Wordpress Custom Post Types im Einsatz
Die Freelancer-Netzwerkseite umgesetzt mit WordPress Custom Post Types.

Ich hoffe mein Bericht zur Nutzung von Custom Post Types in WordPress kann dir bei der eigenen Verwendung weiterhelfen. Welche Einsatzmöglichkeiten siehst du für Custom Post Types? Findest du die Funktion praktisch und welche Erfahrungen hast du mit der Verwendung von Custom Post Types bereits gemacht? Über dein Feedback und deine Tipps freue ich mich sehr!

Tipps zum Weiterlesen

29 Kommentare

  1. Hi Ellen,

    Schöner Überblicksartikel! Aber warum verwendest du ein page-template und nicht archive-freelancer.php. Wäre an sich genau für solche Überblicksseiten gedacht.

    cu werner

    • Sehe ich wie Werner. Eigentlich müsste unter elmastudio.de/freelancer eine Übersichtsseite (dafür steht der rewrite Parameter) kommen. Wenn du eine archive-freelancer.php hättest. Und die Seite kannst du ja dann via Menü als Link einfügen. ;)

  2. Danke fürs Teilen! Die Umsetzung als Archiv (anstatt Hierarchie) finde ich plausibel, sie lässt sich bei Bedarf später z.B. um Tags erweitern.
    Was mir persönlich bei CPTs im Allgemeinen latent Kopfschmerzen macht, ist die Mischung von Theme- und Plugin-Charakteristika eines CPT:

    Eigentlich würde ich einen CPT immer als Plugin anlegen wollen, sonst sind die Inhalte ja futsch, wenn ich mal das Theme wechseln will! (Oder ich muss die exakt selben Funktionen ins neue Theme kopieren; nicht wirklich schlimm, aber auch nicht wirklich elegant.)
    Auf der anderen Seite nützt ein CPT-Plugin nichts, wenn es keine äquivalente Ausgabe im aktiven Theme findet, und das ist bei einem CPT ja fast schon zwingend ein eigenes Template. Ein solches per Plugin zu generieren, ist aber auch Unsinn, denn woher soll das Plugin die Markup-Struktur des Theme kennen?

    Mein Fazit: Grundsätzlich mit einem Child-Theme arbeiten, wenn ein CPT ins Spiel kommt – ganz gleich, ob ich ansonsten ein Child-Theme benötige, oder nicht. Auf diese Weise muss ich bei einem Theme-Wechsel, sofern ich mit dem Child-Theme keine anderen Modifikationen am Eltern-Theme umgesetzt habe, nur die Angabe „Template“ in der style.css anpassen.

  3. Wow, kurz und einfach erklärt.Ich wünschte ich hätte damals als ich die CPTs gebraucht habe auch eine solche Anleitung gehabt ;-) Du machst bestimmt vielen Leuten im Netz eine Freude :D

  4. Hi Ellen,
    ich versuche als „WordPress Neuling“ gerade ein Projekt mit WordPress umzusetzen.
    Mit den vorhandenen Artikeln bin ich an die Grenzen gekommen und habe schon von CPT gelesen. Da kommt dieser Artikel gerade zur richtigen Zeit … vielen Dank.
    Allerdings ist dieses Thema, zumindest für Anfänger, die sich eher mit dem Inhalt der Seite beschäftigen, doch recht komplex. Insbesondere wenn grundlegende Englischkenntnisse fehlen :-(
    Z.B. kann ich die „Diskussion“ zwischen: „Mischung von Theme- und Plugin-Charakteristika eines CPT“ … wie sie auch hier von Caspar aufgeworfen wurde (noch) nicht ganz nachvollziehen.
    Eine Frage in die Runde, wenn das hier erlaubt ist, gibt es hierzu eine gute Übersicht / Erklärung (gerne in deutsch :-), die ich noch nicht gefunden habe. Viele Seiten die ich besucht habe, setzten doch erhebliche Vorkenntnisse voraus.

    Werde deinen Tipp mal ausprobieren und sehen, ob sich meine Vorstellungen damit umsetzen lassen … Danke nochmal.
    Gruß
    Subari

    • Es gibt einige nützliche Plugins die mit den meisten Themes (auch meinen selbst geschriebenen) sehr gut Arbeiten. Das einzige das ein Plugin nicht weiß ist wie die Artikel ausgegeben werden sollen. Wenn sie ausgegeben werden sollen wie die normalen Artikel können die Plugins das in der Regel ohne weitere Anpassung, wenn man jedoch wie Ellen eine spezielle ausgabe möchte, dann sollte man auf archiv-customposttype.php zurückgreifen.

      Als beispiel für gute Plugins:
      Custom Post Type UI
      Easy Custom Content Types
      Zweiteres ist zwar Kostenpflichtig, lohnt sich jedoch da es sowohl eine Exportfunktion bietet und eine automatische ausgabe der Custom Post Types unterstützt.

  5. Wie kann ich denn „Thumbnails“ freigeben? Würde gerne für eine kirchliche Jugendwebseite die JugendarbeiterInnen so aufnehmen und ein Bild zuordnen. Leider habe ich es auch nach langem Getüftel nicht hinbekommen.

  6. Hallo Ellen,
    ich habe in den letzten Wochen sehr viel mit den Custom Post Types herum probiert und bin irgendwie immer wieder hier gelandet, weil Du die Dinge auch für Anfänger wie mich kurz und verständlich auf den Punkt bringst.

    Vielen Dank dafür, Michael

  7. Ich hatte versucht, die Funktionen in eine spezielle Datei auszulagern, falls es mal mehr wird, klapp aber nicht:

    In der functions.php steht dann: include_once (TEMPLATEPATH . '/custompost.php');

    Ist das überhaupt sinnvoll?

    • Klar, wieso nicht? Sonst wird die functions.php irgendwann viel zu voll, da ist Kappselung immer gut.

  8. Hallo,
    dies ist ein super Artikel der mir schon sehr geholfen hat. Nur habe ich ein Problem und zwar möchte ich meine custom post types mit masonry floaten lassen. das funktioniert auch. Doch um die post types unterschiedlich zu stylen brauche ich als wie kann ich das denn machen?
    Über eure Hilfe wäre ich sehr Dankbar.

    • als div id den namen des Post Types (sorry) das wurde ausgeblendet, weil ich es als html code in mein Kommentar geschrieben habe..

  9. Hallo Ellen,

    was mich hierbei mal interessieren würde:

    Wie erstelle ich denn nun nach dem grundsätzlichen Anlegen der neuen Custom Post Types z.b. einen neuen Artikel (bzw. custom post) über PHP selbst? (also nicht über das Backend).

    Hast du da einen Tipp?

  10. Hallo,
    wenn ich den Code
    ‚freelancer-netzwerk‘, ‚posts_per_page‘ => 30, ‚orderby‘ => ‚rand‘ );
    03 $loop = new WP_Query( $args );
    04 while ( $loop->have_posts() ) : $loop->the_post();
    05 echo “;
    06 the_title(“, “);
    07 the_content();
    08 echo “;
    09 endwhile; ?>

    in meine functions.php eingebe dann funktioniert so weit alles. Aus irgend einem Grund wird aber mein Footer auf der entsprechenden Seite dann rechts und links abgeschnitten. Woran könnte das liegen und wie lässt sich das Problem lösen?

    Danke und liebe Grüße,
    Max

  11. Ich korrigiere, der Code ist wie folgt:
    $args = array( ‚post_type‘ => ‚freelancer-netzwerk‘, ‚posts_per_page‘ => 30, ‚orderby‘ => ‚rand‘ );
    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
    echo “;
    the_title(“, “);
    the_content();
    echo “;
    endwhile;

    • scheinbar nimmt der Code Einfluss auf die style.css, wie kann man das ausschließen bzw. verhindern?

  12. Ist es auch möglich einen Custom-Post-Type (CPT) normalen WP-Posts zuzuordnen? zB so, dass beim Bearbeiten/Anlegen davon rechts eine Meta-Box erscheint, mit der man die Posts auswählen (multiple) kann, und dann in der single.php diese Auswahl geladen wird und der CPT auf der Post-Seite angezeigt wird?

    Beispiel: Ich verwalte Downloads als Custom-Post-Types. Ein Download soll bei verschiedenen aber von mir ausgewählten Posts unterhalb des Textes erscheinen. Wie könnte ich das bewerkstelligen?

  13. Hallo.

    Toll Anleitung.

    Aktuell habe ich nur ein Problem das ich selbst wohl nicht gelöst bekommen.
    Anstelle des Contents eines jeden einzelnen Post würde ich gerne einfach nur den Title + Permalink ausgeben.
    Leider bekomme ich es nicht hin. Alles was ich versuche klappt nicht. Dabei benutze ich die the_permalink Funktion. Vielleicht hat ja jemand einen Rat für mich?
    Danke!

  14. Super Artikel, hat mir sehr geholfen. Vielen Dank.

    Eine Frage. Jetzt habe ich meinetwegen so eine Liste per Custom Type erstellt und möchte, wenn ich einen Blog Artikel erstelle, per zb. Dropdown jemanden daraus auswählen und zuweisen, so dass er im Frontend auch angezeigt wird.

    Irgendwie stehe ich da jetzt auf dem „Schlauch“. Den Dropdown habe ich bereits hinzufügen können aber ich sehe die Auswahl nicht.

    Vielen Dank Grüsse Steven

  15. Hey,
    super Artikel, aber leider ist es wohl mit schlechtem WordPress Wissen (stehe am Anfang)
    nicht nachvollziehbar.

    Ich hab es noch hinbekommen die Übersichtsseite einzufuegen. Aber dann verliese sie mich und die ??? häuften sich.

    Ich wollte eigetlich nur eine Seite der „Mitarbeiter“ erstellen. Links das Foto und rechts eine kurze Beschreibung.

    Vielleicht kann man mir noch helfen und die ??? vertreiben.

    Grüße aus dem Schwarzwald

    Heiko

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *