Custom Post Types in WordPress – eine spannende Reise

Seit Wordpress 3.0 gibt es nun die Custom Post Types und seit 3.1 die notwendigen Templates im Theme, aber immer noch verwenden viele die fertigen Plugins aus dem Directory von Wordpress. Wenn man aber das Prinzip nicht verstanden hat und man wechselt das Theme und nichts funktioniert mehr hat man ein Problem.

Screenshot Custom Post Type in WordPressSeit WordPress 3.0 gibt es nun die Custom Post Types und seit 3.1 die notwendigen Templates im Theme, aber immer noch verwenden viele die fertigen Plugins aus dem Directory von WordPress. Wenn man aber das Prinzip nicht verstanden hat und man wechselt das Theme und nichts funktioniert mehr hat man ein Problem.

Deshalb trage ich hier meine Erfahrungen beim Erstellen eines Custom Post Types ein und versuche soviele Blickwinkel wie möglich abzudecken.

Erste Frage – gibt es eine Dokumentation?

Wie immer bei WordPress gibt es einen guten Einstieg im Codex mit weiteren Beispielen von . Ein Custom Post Type ist eine Erweiterung der Posts (Beiträge) und kann für viele Anwendungsbeispiele verwendet werden (Portfolio, Filme, Teammitglieder,…).

  • Post (Post Type: ‚post‘)
  • Page (Post Type: ‚page‘)
  • Attachment (Post Type: ‚attachment‘)
  • Revision (Post Type: ‚revision‘)
  • Navigation Menü (Post Type: 'nav_menu_item‘)

Wie sieht die Struktur eines Custom Post Types aus?

Man registiert einen neuen Post Type und initialisiert diesen am Ende des Codes:

Beispiel:

function register_portfolio_posttype() {
    $labels = array(
        'name'                 => _x( 'Portfolio', 'post type general name' ),
        'singular_name'        => _x( 'Portfolio', 'post type singular name' ),
        'add_new'             => __( 'Neues Portfolio' ),
        'add_new_item'         => __( 'Portfolio' ),
        'edit_item'         => __( 'Portfolio' ),
        'new_item'             => __( 'Portfolio' ),
        'view_item'         => __( 'Portfolio' ),
        'search_items'         => __( 'Portfolio' ),
        'not_found'         => __( 'Portfolio' ),
        'not_found_in_trash'=> __( 'Portfolio' ),
        'parent_item_colon' => __( 'Portfolio' ),
        'menu_name'            => __( 'Portfolio' )
    );

    $taxonomies = array('category');

    $supports = array('title','editor','author','thumbnail','excerpt','revisions','post-formats');

    $post_type_args = array(
        'labels'             => $labels,
        'singular_label'     => __('portfolio'),
        'public'             => true,
        'show_ui'             => true,
        'publicly_queryable'=> true,
        'query_var'            => true,
        'capability_type'     => 'post',
        'has_archive'         => true,
        'hierarchical'         => false,
        'rewrite'             => array('slug' => 'portfolio', 'with_front' => false ),
        'supports'             => $supports,
        'menu_position'     => 5,
        'menu_icon'         => '/wp-content/',
        'taxonomies'        => $taxonomies
     );
     register_post_type('portfolio',$post_type_args);
}
add_action('init', 'register_portfolio_posttype');

Eine genaue Beschreibung der einzelnen Werte folgt in Kürze.

Kann man Kategorien mit Custom Post Types verwenden?

Ja, mit dem Array taxonomies ist dies auch hier einfach möglich.

$taxonomies = array('category');

Wie bzw. wo baut man die Custom Post Types ein?

Hier gibt es zwei Möglichkeiten – die functions.php oder eine eigenes Plugin. Ich habe mich für die Erstellung eines Plugins entschieden, denn wenn man das Theme wechselt, ist der Custom Post Type dann verschwunden. Ein Plugin kann man immer „mitnehmen“ und aktiviert lassen.

Man erstellt dafür einen Ordner und ein PHP File welches den selben Namen trägt und lädt diese Datei in den /wp-content/ Ordner. Natürlich sollte man vorher ein paar Metadaten und den Inhalt vom Beispiel oben hinzufügen. Ein guter Start für ein Plugin ist die Vorlage des WordPress Plugin Boilerplate von Tom McFarlin.

Wie kann ich ein eigenes Layout für meine Custom Post Types erstellen?

Dafür braucht man eigene Templates im Theme für Archive (archive-portfolio.php) und Single Ansicht (single-portfolio.php). Wie man sehen kann verwenden diese den Namen des Custom Post Types um eine Zuordnung zu erhalten. In diese Templates kann man dann die Queries so einbauen wie man möchte.

Wie kann ich Custom Post Types und deren URLs/Slugs in andere Sprachen übersetzen?

Ich habe dafür WPML verwendet, wo dies relativ einfach funktioniert. Für die Übersetzung des Custom Post Types gibt es unter den Übersetzungsoptionen den Punkt

  • Benutzerdefinierte Beiträge

wo man seinen erstellten Custom Post Type findet und auswählen kann – somit weiß das System, dass diese Beiträge übersetzt werden können.

Bei den URLs/Slugs ist das etwas umständlicher. Zuerst braucht man die Erweiterung für die WPML String Translation. Danach muss man seinen Custom Post Types Code mit folgender Zeile erweitern:

'rewrite' => array('slug' => _x('portfolio','URL slug','your_text_domain'), 'with_front' => false),

Das _x und der Wert ‚URL Slug‘ zeigt WPML, dass hier die URL ersetzt werden soll, je nach Sprache.

Hat man das Plugin aktualisiert kann man wieder in den Übersetzungsoptionen unter

  • Optionen für die Übersetzung benutzerdefinierter Beitrags-Slugs

ein Hackerl setzen und muss bei den Benutzerdefinierten Beiträgen noch die alternativen Slugs eingeben. Dann nochmal die Permalinks aktualisieren und es sollte funktionieren.

Weitere Links für Custom Post Types Tipps und Tricks

Platzhalter für Texte und Bilder – Lorem Ipsum

Dummy Bild erstellt von einem Online GeneratorWer kennt das nicht – es gibt ein neues Projekt, das Layout ist so gut wie fertig. Der Kunde oder man selbst möchte aber sehen wie die Webseite mit Inhalten aussieht.

Jetzt kann man auf der Tastatur sinnlose Wortketten erstellen und mit Paste & Copy einen Inhalt simulieren. Oder man greift auf die Möglichkeit zurück dynamische Dummytexte und Bilder zu erstellen.

Im Laufe der Zeit haben sich zum berühmt-berüchtigten Lorem Impsum Text weitere Variationen ergeben und einige der Online Generatoren möchte ich hier vorstellen:

Texte

Bilder

Wie man sieht gibt es zahlreiche Möglichkeiten, wobei nicht alle immer passend sind… Welche Generatoren verwendet ihr die ich hier vergessen habe?

Achja und beim Veröffentlichen nicht vergessen die Texte und Bilder zu ersetzen! 😉

Theme Switch und was ich noch plane

screenshotEs ist vollbracht – nach langer Zeit habe ich endlich das Theme gewechselt und zwar aufgrund der fehlenden Flexibiltät der Funktionen und der Updates.

Ab sofort läuft die Seite mit dem Xtreme One – Framework, welches ich schon bei anderen Projekten erfolgreich einsetze. Einfach, übersichtlich und in HTML5…

Dadurch hat sich am Layout nicht wirklich etwas geändert, sondern mehr unter der Haube 😉 Der Fokus bei dieser Website liegt ja sowieso auf dem Inhalt und weniger am Design. Wie auch immer ich habe mir zusätzlich vorgenommen die Seite auszubauen und meine zahlreichen Links in Übersichtsseiten zu HTML5, CSS3 usw. übersichtlich zur Verfügung zu stellen.

Aber erst im neuen Jahr – jetzt ist mal der erste Schritt getan und ich freue mich schon auf Fragen, Anregungen und Feedback im Jahr 2013.

Migration von Joomla! nach WordPress

Der Versuch mit einer Erweiterung von Wordpress Inhalte aus einer Joomla Webseite zu übernehmen. Probleme und Eigenheiten, die dabei aufgetreten sind, werden kurz erklärt.

Es war wieder mal soweit. Es wollte jemand von einem anderen System auf WordPress wechseln. Diesmal war es nicht blogengine.net sondern Joomla, auf dem die alte Webseite aufgebaut war. Die Screenshot des Plugins FG Joomla to WordPressVersion war 1.5 also ebenfalls etwas veraltet und bei den WordPress Plugins habe ich mich für FG Joomla to WordPress entschieden. Es ist aktuell und wird noch betreut und die Usermeinungen waren durchwegs positiv.

Was man vorab wissen sollte ist, das Joomla! den Inhalt wie Artikeln anlegt und diese mit Kategorien verknüpft. Wenn man das nicht beachtet hat man auf einmal statt einer Seitenstruktur zahlreiche Artikel und Kategorien und kann wieder von vorne anfangen. Aber zu Glück kann man über die Optionen des Plugins die Inhalte wieder leeren.

Also ich habs natürlich falsch gemacht ;-), aber beim zweiten Versuch hat es geklappt. Wirklich? Nein, im Nachhinein sind mir noch ein paar Sachen aufgefallen.

  • Vorschauseiten mit Unterbeiträgen wurden in einzelne Seite zerlegt
  • Bilder wurden nicht übernommen
  • Formulare wurden nicht übernommen inkl. der Seite
  • Pfade wurden nicht aktualisiert

Bei meiner Beispielseite mit 30 Seiten, 5 Bildern und 10 Links war das nicht tragisch, aber bei größeren Installationen sollte man vielleicht doch noch ein anderes Plugin testen 😉

  1. Joomla/Mambo To WordPress Migrator
  2. Joomla to WP Migrated Users Authentication Plugin
  3. Joomla 1.5 Importer

Wie sind eure Erfahrungen und welche Plugins könnt ihr empfehlen?

 

WordPress aktuell halten? Regel Nr. 2 nach Backups!

Updates sind wichtig auch für das CMS WordPressHeute bin ich im RSS Feed auf die Frage von Webmaster Friday aufmerksam geworden. Es wurde unter anderem gefragt wie wichtig Updates für WordPress sind.

Meiner Meinung nach kommen sie von der Priorität knapp nach regelmäßigen Backups. Warum? Nun ich betreue und über 20 Installationen und zu manchen Kunden kam ich erst, nachdem schon jemand ein „altes“ System geknackt hat und fleißig auf Nahrungsergänzungsmittel und sonstiges verlinkt hat 😉

Wie sieht das aus und gibt es einen Unterschied zwischen Core und Plugins? Auf jeden Fall, aber zuerst kommt es darauf an ob es ein Security Updates ist oder eine Funktion dazu kommt. Prinzipiell ist es ja so das man kein Update gleich einspielen sollte, es könnte noch ein Fix kommen 😉

Also teste ich alles auf meinen 2 Spielwiesen und wenn dort alles glatt geht, wird nach und nach der Rest nachgezogen. Sollte es zu Problemen kommen ist es meistens ein kleiner Absturz der sich mit der Entfernung der maintenance Datei wieder richten lässt.

Auf jeden Fall versuche ich alles mit den automatischen Updates zu machen – geht schneller und ich konnte bis jetzt noch keine groben Nachteile zum FTP Upload finden – außer vielleicht beim Core Update das wiedererscheinen der wp-config-sample.php…