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 🙂

Pressespiegel aus PDF-Dateien erstellen

Gestern hatte ich euch ja angekündigt, dass ich etwas mit den neuen PDF-Vorschaubildern basteln möchte. Ich habe mir als Beispiel einen kleinen Pressespiegel überlegt, der alle PDF-Dateien mit einem Schlagwort “Pressespiegel” als Archiv anzeigt.

PDF-Dateien verschlagworten

Vermutlich hätte ich den Artikel besser übermorgen gepostet, denn im 20. Adventskalenderartikel letztes Jahr habe ich euch erzählt, wie man Anhänge verschlagworten kann 😉 Im Grunde war es super einfach. Alles, was ihr dazu braucht, ist ein einzelner Funktionsaufruf:

Weiterlesen →

PDF Vorschaubilder von WordPress 4.7 in XAMPP unter Windows verwenden

Mit WordPress 4.7 wurde eine neue sehr nützliche Funktion eingeführt: PDF-Vorschaubilder. Ich wollte heute eigentlich einen Beitrag zu dem Thema schreiben und habe es einfach mal testen wollen. Leider funktioniert es nicht “out of the box” unter Windows. Für kleine Demos setze ich gerne XAMPP ein und hiermit hatte ich leider keinen Erfolg mit den Vorschaubildern. Also habe ich meinen geplanten Artikel verschieben müssen, um euch erst einmal zu zeigen, wie ihr es unter Windows zum Laufen bekommt.

Notwendige Abhängigkeiten installieren

Wie im Make-Blogartikel bereits beschrieben wird, benötigt die neue Funktion drei Komponenten Imagick, ImageMagick und Ghostscript. Alle drei sind unter Windows nicht installiert. Daher hier kurz zu jedem eine Installationsanleitung.

Weiterlesen →

Performanceanalyse von Plugins

Nachdem ich euch gestern gezeigt habe, welche Tools es für die Analyse von MySQL Datenbankabfragen gibt, möchte ich heute auf den zweiten potentiellen Flaschenhals bei der Performance eingehen: die Ausführungszeit der PHP-Skripte. Hierbei soll es auch darum gehen, Plugins zu identifizieren, die besonders viel Ladezeit verursachen.

Das Plugin “P3 (Plugin Performance Profiler)”

Eine Erhebung solcher Daten ist nicht gerade einfach. Glücklicherweise gibt es genau für diesen Zweck ein sehr gutes Plugin. Den Plugin Performance Profiler oder abgekürzt einfach P3 genannt. Nachdem ihr dieses kostenlose Plugin installiert habt, könnt ihr über “Werkzeuge | P3 Plugin Profiler” einen neuen Test starten. Ich war mal so mutig und habe es für diese Seite gemacht 🙂

Weiterlesen →

Langsame Datenbankabfragen identifizieren

Gestern hatte ich euch berichtet, welche Fehler man bei der Analyse machen kann. Heute möchte ich euch einen ersten Tipp geben, wie ihr Performanceprobleme mit Datenbankabfragen erkennen könnt.

Ein sehr wichtiger Performancewert ist ja die sogenannte “Time to first byte”, also die Zeit die es dauert, bis der Server nach einer Anfrage die ersten Daten zurückschickt. Ist diese Zeit sehr hoch (etwa mehr als 0,5 Sekunden), dann ist in der Regel eines dieser beiden Dinge schuld (oder beide): die Ausführungszeit der PHP-Skript oder die Dauer der Datenbankabfragen. Um die PHP-Skripte geht es in einem anderen Artikel, also beschäftigen wird und heute mal mit den Datenbankabfragen.

Exkurs: Annahmen zu Datenbankabfragen

Ich möchte auch heute ein wenig auf typische Annahmen eingehen, weshalb eine Seite langsam ist, und diese ein wenig entkräften.

Weiterlesen →