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 đ