Ich verwende einen Offline Editor zum schreiben der Beiträge. Aktuell ist das MarsEdit. Die Auswahl eines solchen Tools wäre sicherlich auch noch mal einen eigenen Beitrag wert.
Allerdings hab ich auf meiner Webseite eine Besonderheit, mit der keiner der mir bekannten Offline Editoren umgehen kann.
Auf staude.net sind Blogbeiträge nicht vom Beitragstyp „Beiträge“ sondern sie sind als eigener Beitragstyp „Blog“ angelegt. In WordPress sieht das dann so aus, das ich zusätzlich zu den Beiträgen und Seiten, die WordPress von Haus aus mitbringt zusätzlich noch die Menüpunkte Vorträge und Blog habe.
Da mein Editor damit nicht umgehen kann, brauchte es eine Lösung wie ich meine Blogbeiträge in MarsEdit als Posts erstelle und dann anschließend auf meiner Webseite in einen Blog-Beitragstypen überführe.
A. manuell
Für die manuelle Änderung des Beitragstypen gibt es (natürlich) Plugins. Ich verwerne hier das Plugin Post Type Switcher.
Nach der Aktivierung des Plugins, steht in der Veröffentlichen-Metabox von Beitragstypen eine weitere Einstellmöglichkeit zur Verfügung, mit der der Beitragstyp geändert werden kann.
Ich schreibe in MarsEdit den Beitrag, veröffentliche ihn und rufe anschließend das Backend meines WordPress auf um dort manuell den Beitragstypen zu ändern.
B. automatisch
Um den Beitragstypen automatisch von WordPress ändern zu lassen, muss ich in dem Beitrag hier Information übergeben, das es sich um einen Blogbeitrag handelt.
WordPress bietet dazu mit den Custom Fields (Eigene Felder in einem deutschen WordPress) die Möglichkeit zu einem Beitrag weitere Informationen zu speichern.
MarsEdit bietet eine „rudimentäre“ Unterstützung von Custom Fields. Dazu wählt man die Settings eines Blogs aus.
In dem anschließend sich öffnenden Fenster wählt man den Tab “Custom Fields“ an. In dieser Ansicht können Customfields angelegt werden
Ich habe ein Cudtomfield is_blog angelegt und innerhalb von MarsEdit mit „Blogbeitrag“ betitelt. Beim bearbeiten oder erstellen eines neuen Beitrags stellt MarsEdit nun im Kopfbereicht des Beitrag dieses neue Feld ebenfalls dar.
Was dort eingetragen wird, findet sich nach dem übermitteln des Beitrag an WordPress im Backend im Bereich „Eigene Felder“ wieder.
Nun muss dieses CustomField bei speichern des Beitrags noch ausgewertet werden und der Beitragstyp geändert werden. Dazu habe ich folgenden Code in der functions.php meines Child-Themes.
add_filter ( 'wp_insert_post_data', 'move_post2blog',10,2 ); function move_post2blog( $data , $postarr) { $id = $postarr[ 'ID']; if ( $id != 0 && $data[ 'post_status'] == 'publish' ) { $blog = get_post_meta( $id, 'is_blog', true ); if ( $blog == 1 ) { $data[ 'post_type'] = 'blog'; delete_post_meta( $id, 'is_blog'); } } return $data; }
wp_insert_post_data ist ein Filter Hook über denen eigene Funktionen beim Speichern eines Beitrags aufgerufen werden um die zu speichernden Daten zu manipulieren. Es wird die ID des Beitrag geholt, dann zu dieser ID das CustomField ‚is_blog‘. Wenn is_blog eine 1 ist und der Beitrag veröffentlich ist, dann wird der Posttype geändert auf blog und das CustomField wird gelöscht.
Anmerkungen
Folgende Dinge sind zu bedenken, wenn etwas ähnliches nachgebaut werden soll.
– in dem Moment wo der PostType geändert ist, ist der Beitrag für den Offline Editor nicht mehr zu sehen. Das ist der Grund warum ich in dem PHP Code den Beitragsstatus mit abfrage. Nur im Status „Veröffentlicht“ wird der Beitragstyp geändert. Das ist nötig um im als Entwurf auf dem Server zwischenspeichern zu können und anschlileßend noch mit dem Editor darauf zuzugreifen.
– Ich bin der alleinige Redakteur auf meiner Seite, daher ist es für mich ausreichend in das Customfield im MarsEdit eine 1 einzutragen. Sollten mehrere Redakteure und/oder mehrere Posttypen beteiligt sein, sollte das Verfahren noch einmal überdacht werden. Statt einer „1“ sollte dann vielleicht der Name des Ziel-Posttypes verwendet werden. Dürfen alle Redakteure für alle Beitragstypen veröffentlichen?