Ich wollte eigentlich schon vorgestern einen Beitrag ĂĽber die Sammel-Aktionen („Bulk Edit Actions“) schreiben. Aber jede Idee, die ich hatte, war schon im Core umgesetzt. Aber mit meinem Beitrag von gestern ist mir dann doch eine Idee gekommen 🙂
Mehrere Medien einem Schlagwort zuordnen
Gestern habe ich euch ja gezeigt, wie ihr einen einfachen Pressespiegel erstellen könnt. Dabei musstet ihr alle PDF-Dateien einzeln zur Kategorie hinzufĂĽgen. Das ist natĂĽrlich bei vielen Dateien sehr mĂĽhsam. Leider gibt es auch keine „Massenbearbeitung“ wie bei Beiträgen. Das Einzige, was ihr mit mehreren Dateien machen könnt, ist diese unwiderruflich zu löschen:
Dank der neuen Funktion in WordPress 4.7 können wir diese Aktionen nun sehr einfach erweitern. Genau das möchte ich nun einmal kurz im Code zeigen.
Eine Sammel-Aktion zur Auswahl hinzufĂĽgen
Zuerst einmal müssen wir eine neue Option zum Dropdown hinzufügen. Hierzu verwenden wir den dynamischen Filter bulk_actions-{screen_id}
mit der passenden screen_id
fĂĽr die MedienĂĽbersicht:
function press_review_archive_register_bulk_actions( $bulk_actions ) { $bulk_actions['press_review_archive'] = __( 'Add to press review', 'press-review-archive' ); return $bulk_actions; } add_filter( 'bulk_actions-upload', 'press_review_archive_register_bulk_actions' );
Das war auch schon alles. Nun könnt ihr die neue Option aus dem Dropdown auswählen:
Was passiert aber nun, wenn ihr die neue Option auswählt auf „Ăśbernehmen“ klickt? Selbstverständlich gar nichts 🙂
Aktion definieren
Damit auch etwas passiert, mĂĽssen wir fĂĽr unsere neue Sammel-Aktion noch eine Callback-Funktion definieren. Das machen wir ĂĽber den ebenfalls dynamischen Filter handle_bulk_actions-{screen_id}
wie folgt:
function press_review_archive_handler( $redirect, $doaction, $post_ids ) { if ( 'press_review_archive' !== $doaction ) { return $redirect; } $added = 0; foreach ( $post_ids as $post_id ) { $post = get_post( $post_id ); if ( 'application/pdf' === $post->post_mime_type ) { $t = wp_set_object_terms( $post_id, 'pressespiegel', 'post_tag', true ); if ( ! is_wp_error( $t ) ) { $added++; } } } $redirect = add_query_arg( 'press_review_archive_added', $added, $redirect ); return $redirect; } add_filter( 'handle_bulk_actions-upload', 'press_review_archive_handler', 10, 3 );
Die Funktion sieht vielleicht im ersten Moment komplexer aus, als gedacht. Aber im Grunde spielt sich das wichtigste in der foreach
Schleife ab. Dort füge ich das Schlagwort den PDF-Dateien hinzu. Ganz zu Beginn wird geprüft, ob es sich überhaupt um die richtige Sammel-Aktion handelt. Diese Bedingung ist also sehr wichtig. Am Ende der Funktion werden noch die hinzugefügten Schlagworte gezählt und als Anzahl an die Weiterleitung nach der Aktion weitergegeben. Wieso ich das mache, seht ihr im letzten Schritt.
RĂĽckmeldung an den Nutzer geben
Je nachdem, was die Aktion durchfĂĽhrt, sollte man dem Nutzer eine RĂĽckmeldung geben, ob die Aktion korrekt ausgefĂĽhrt wurde. Hierzu definieren wir eine Funktion, die einen solchen Hinweis ausgibt:
function press_review_archive_bulk_action_admin_notice() { if ( ! empty( $_REQUEST['press_review_archive_added'] ) ) { $items_added = intval( $_REQUEST['press_review_archive_added'] ); printf( '<div id="message" class="updated fade"><p>' . _n( 'Added %d file to the press review archive.', 'Added %d files to the press review archive.', $items_added, 'press-review-archive' ) . '</p></div>', $items_added ); } } add_action( 'admin_notices', 'press_review_archive_bulk_action_admin_notice' );
Das Ergebnis könnte dann in etwa wie folgt aussehen:
Fazit
Ich hoffe, ich konnte euch in diesem Beitrag ein weiteres spannendes Feature von WordPress 4.7 näher bringen. Es scheint auf den ersten Blick ein wenig unscheinbar zu sein, aber die Möglichkeiten davon sind riesig. Ich habe das Plugin von gestern mal um die neuen Funktionen erweitert und wieder als GIST veröffentlicht, wo ihr es euch auch als fertiges Plugin in einer ZIP-Datei herunterladen könnt.
Habt hier vielleicht schon früher versucht, eigene Sammel-Aktionen zu definieren? Falls ja, welche waren das? Über einen Kommentar dazu würde ich mich wie immer sehr freuen 🙂