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 Plugin, 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

Pflichtfelder sind mit * markiert.