Coding | WordPress

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

stormtrooper 1343877 1920

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;

...

}

weiter schmökern

Schreibe einen Kommentar

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden.

Deine E-Mail-Adresse wird nicht veröffentlicht.