WordPress save_post-Hook – Beim Speichern überarbeiteter Beiträge von der richtigen Post_id ausgehen

stormtrooper 1343877 1920
Bildquelle: Pixabay, aitoff

Beim Speichern von Beiträgen sollte automatisch ein Beitragsbild gesetzt werden, wenn keines da war. Dafür abzufragen ob ein Beitrag ein Beitragsbild hat, gibt es die Funktion has_post_thumbnail($post_id).

Wenn diese Abfrage false zurückgab, sollte es weitergehen bis zu set_post_thumbnail(). Das funktionierte auch – bei neuen Beiträgen. Beim Überarbeiten und Speichern eines bereits veröffentlichten Beitrags ignorierte die Funktion die Zeile if ( hast_post_thumbnail($post_id) ) return; jedoch.

Das wurde in dem Fall schnell auffällig, weil Beitragsbilder anhand eines Links in einem benutzerdefinierten Feld von der da gespeicherten Website geholt und in die Mediathek kopiert wurden, und es sich dabei je Beitrag stets um dasselbe Bild handelte. Die Mediathek sah bald aus wie eine Klonfabrik. Jedes Mal neu speichern desselben Beitrags erzeugte einen neuen Klon, der dann neu als Beitragsbild gesetzt wurde.

Der Grund dafür ist, dass WordPress (sofern nicht bewusst anders konfiguriert) Revisionen von Beiträgen anlegt. Man kann bei save_post nur beim Neuanlegen sicher davon ausgehen, sich im „richtigen“ Beitrag zu befinden. Revisionen sind Kinder des Originalbeitrags, und daher führt die Frage, ob es bereits ein Beitragsbild gibt, zu einem Ergebnis, das sich auf die Revision bezieht. Um sicher zu gehen, dass nicht jedes Mal neu Speichern einen neuen Bildklon erzeugt, ist zusätzlich zu ermitteln, ob ggf. die Parent ID bereits ein post_thumbnail hat, und falls ja, auf Download, Import und setzen als Beitragsbild zu verzichten.

function pptf_set_webimage_as_featured( $post_id ) {
if ( $parent_id = wp_is_post_revision( $post_id ) ) {
	$post_id = $parent_id;
}
if ( has_post_thumbnail( $post_id ) ) return;
...
}

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

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

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable