Adventskalender Tag 21: Bilder beim Upload automatisch verschlagworten

Im Beitrag von gestern haben wir ja gesehen, wie wir einem Bild Schlagwörter hinzufügen können. Die beiden beschriebenen Wege sind allerdings schon recht aufwändig, wenn man viele Bilder verschlagworten möchte. Wäre es nicht schön, wenn das einfacher, im besten Fall sogar automatisch funktioniert? Genau das habe ich in etwa 4-5h ausgetüftelt und möchte euch das Ergebnis gerne präsentieren.

Bilder verschlagworten

Die Idee dahinter ist, dass man die Bilder schon vor dem Upload zu WordPress verschlagwortet. Wer beispielsweise Adobe Bridge oder ähnliche Programme zur Verwaltung seiner Bilder einsetzt, der verwendet eventuell schon hierbei Schlagwörter, um die Bilder zu gruppieren. Auch Windows bietet eine recht einfache Methode an, um Schlagwörter zu vergeben. Entweder über „Rechtsklick -> Eigenschaften -> Details“ oder über den Detailbereich im Explorer (hier an Beispiel von Windows 10):

explorer-bild-details

Dort finden wir den Punkt „Markierungen“, wo wir eine mit Semikolon getrennte Liste an Schlagworten vergeben können.

Schlagwörter automatisch auslesen

Wäre es nun nicht genial, wenn WordPress beim Upload eines Bildes genau diese Schlagwörter automatisch hinzufügen würde? Um genau das zu erreichen habe ich sehr lange getüftelt. Bei der Verschlagwortung unter Windows werden die Angaben beispielsweise nicht mit der UTF-8 Kodierung gespeichert und nach jedem Buchstaben der „Keywords“ wird ein Nullbyte-Zeichen eingefügt. Darüber hinaus fehlt unter XAMPP die PHP-Funktion iptcparse() und über die von WordPress umgesetzte Funktion zum Auslesen der EXIF-Daten werden die Keywords nicht extrahiert. Ich musste also eine möglichst einfache Lösung finden, um die Daten zu extrahieren. Folgende Funktion ist hierbei entstanden:

function image_keyword_tagger_extract_exif_keywords( $meta, $file, $sourceImageType, $iptc ) {
	$exif = @exif_read_data( $file, 'IFD0', true );

	if ( ! empty( $exif['IFD0']['Keywords'] ) ) {
		foreach ( explode( ';', image_keyword_tagger_fix_encoding( $exif['IFD0']['Keywords'] ) ) as $keyword ) {
			$meta['keywords'][] = $keyword;
		}
	}

	if ( empty( $meta['title'] ) && ! empty( $exif['IFD0']['Title'] ) ) {
		$meta['title'] = image_keyword_tagger_fix_encoding( $exif['IFD0']['Title'] );
	}

	if ( empty( $meta['copyright'] ) && ! empty( $exif['IFD0']['Copyright'] ) ) {
		$meta['copyright'] = image_keyword_tagger_fix_encoding( $exif['IFD0']['Copyright'] );
	}

	return $meta;
}
add_filter( 'wp_read_image_metadata', 'image_keyword_tagger_extract_exif_keywords', 10, 4 );

Die Funktion liest den sogenannten IFD0-Tag aus, in dem auch die Keywords enthalten sind. Bei der Gelegenheit lese ich dann auch noch die Angaben zum Titel und zum Copyright aus, die WordPress auch teilweise nicht extrahiert. Die Funktion image_keyword_tagger_fix_encoding() kümmert sich schließlich darum, dass die Kodierung korrigiert und die Nullbytes gelöscht werden.

Schlagwörter nach dem Upload speichern

Nachdem wir nun die Schlagwörter ausgelesen und in den Post-Metadaten gespeichert haben, müssen wir daraus noch echte Schlagwörter machen. Hierfür den passenden Hook zu finden hat fast am meisten Zeit benötigt, denn direkt nach dem Upload des Bildes waren die Metadaten noch nicht in der Datenbank gespeichert worden. Nach langer Suche habe ich folgende einfache Funktion fertigstellen können:

function image_keyword_tagger_add_keywords( $mid, $object_id, $meta_key, $_meta_value ) {
	if ( '_wp_attachment_metadata' == $meta_key ) {
		$attachment_meta = wp_get_attachment_metadata( $object_id );

		if ( ! empty( $attachment_meta['image_meta']['keywords'] ) ) {
			wp_set_post_tags( $object_id, implode( ',', $attachment_meta['image_meta']['keywords'] ), true );
		}
	}
}
add_action( 'added_post_meta', 'image_keyword_tagger_add_keywords', 10, 4 );

Ich hänge mich hierbei an den Hook, der die Metadaten des Bildes speichert. Diese lese ich dann aus und füge diese über die Funktion wp_set_post_tags() als echte Schlagwörter hinzu.

Ergebnis

Hat man die Bilder vorher verschlagwortet, die Funktion aktiviert und nun ein Bild neu hochgeladen, sollten wir die verwendeten Schlagwörter sowie den Titel des Bildes in der Dateianhang-Detailansicht sehen:

dateianhang-details-mit-keywords

Fazit

Wer seine Bilder für die Organisation auf dem eigenen Rechner verschlagwortet und diese auch auf dem Blog verwenden möchte, der kann diese Funktion einsetzen um sich viel Arbeit zu sparen. Man muss natürlich beachten, dass alle Schlagwörter importiert werden, die dann wie normale manuell vergebene Schlagwörter zur Auswahl stehen. Eventuell kann man also das Plugin nur ab und zu aktivieren, wenn man es denn für den Import vieler Bilder benötigt. Und da ich gerade schon wieder von Plugin spreche, klar habe ich euch wieder ein entsprechendes GitHub-Repository mit einem ZIP-Download vorbereitet 🙂

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