Eigene Sammel-Aktion mit WordPress 4.7 definieren

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 🙂

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog ĂŒber WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und lĂ€uft nach Feierabend den ein oder anderen Halbmarathon.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert