Wordpress: Meta-Boxen für die Mediathek

Neben einigen internen Verbesserungen, räumt Wordpress auch die Mediathek-Oberfläche ordentlich auf. Genauer gesagt, sie wird der Oberfläche für alle anderen Post-Types angeglichen. Eine gute Entwicklung. Bisher war es umständlich und unflexibel über Filter zu lösen, wollte man neue Elemente in die Oberfläche integrieren. Ab 3.5 kann man konsistent für alle Post-Types mit der Meta-Box-API arbeiten. Fast.

In der Regel wird man Meta-Boxen nutzen, um bestimmte Formularfelder zu Ergänzen, deren Inhalt dann als Meta-Information gespeichert wird, oder sich auf Taxonomien auswirkt, etc. Die Dokumentation empfiehlt, diese Daten mit einer Callback-Funktion auf der Action save_post auszuwerten. Das klappt für alle Post-Types — außer für Attachments, also Dateien in der Mediathek. Denn diese werden über die Funktion wp_insert_attachment() gespeichert, welche nicht save_post anstößt, sondern add_attachment oder edit_attachment. (save_post unterscheidet hier nicht, ob ein Post neu angelegt oder aktualisiert wird.)

Bis vor Kurzem stand die Anpassung der API noch auf der Liste der Tickets für 3.5, wurde dann aber auf, »future release« verschoben. Ich vermute mal aus Zeitmangel. Aus meiner Sicht wäre ein Release zwei Wochen später auch kein Beinbruch gewesen, wenn dafür dieses Ticket noch geschlossen worden wäre, dann wäre der Prozess, die Mediathek an die anderen Post-Types anzugleichen weitgehend abgeschlossen.

In den letzten Tagen hatte ich einige Plugins um Meta-Boxen für die Mediathek erweitert. Da ich die Struktur dieser Plugins beim nächsten Release nicht nochmal anfassen möchte, helfe ich der API etwas auf die Sprünge:

<?php
/**
 * Plugin Name: dna Save Attachment
 * Plugin URI:  https://gist.github.com/4214994
 * Author:      David Naber
 * Author URI:  http://dnaber.de/
 * Version:     2012.12.04
 * Description: Calls the action 'save_post' for Attachment Post Types. Requires PHP 5.3
 */
namespace dna\save_attachment;

/**
 * calls the action 'save_post'
 *
 * @wp-hook edit_attachment
 * @wp-hook add_attachment
 * @param int $post_ID
 * @return void
 */
function do_save_post( $post_ID ) {

	do_action( 'save_post', $post_ID );
}
add_action( 'edit_attachment', __NAMESPACE__ . '\\do_save_post', 5, 1 );
add_action( 'add_attachment',  __NAMESPACE__ . '\\do_save_post', 5, 1 );

Plugin als Gist.

Die Auswertung der Meta-Boxen für Dateien kann jetzt wie gewohnt als Callback auf der Action save_post laufen. Im Idealfall braucht man das Plugin dann beim nächsten Versionsupdate nur deaktivieren. Wer es so oder so ähnlich auch einsetzen möchte, der sei sich im Klaren, dass das API-Verhalten für andere Plugins nicht vorhersehbar ist. Das sollte kein Problem sein, wenn diese ihre Daten ordentlich Prüfen. Im Zweifel muss man dennoch wissen, welche Aktionen auf den drei o.g. Hooks registriert sind. Aus diesem Grund setze ich das Plugin auch nur auf Seiten ein, die ich selbst betreue und dokumentiere das auch Prominent.

Nachtrag: Wenn jemand Haken sieht, die mir verborgen geblieben sind, gebt mir bitte Feedback.

Kommentare

Es wurden noch keine Kommentarte zu diesem Artikel geschrieben.

Fragen, Ideen oder Kritik? – Hier ist Platz dafür!

Dein Kommentar

Um ein Kommentar abzugeben, reicht der Text im Kommentarfeld. Die Angabe eines Namens wäre nett, ist aber nicht erforderlich.

Du darfst folgenden HTML-Code verwenden, musst aber nicht:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>