Heute habe ich versucht save_post
mit der REST API von WordPress anzusteuern, weil ich bei der Änderung eines Meta-Feldes das Thumbnail anpassen wollte. WordPress führt save_post
leider nicht beim Aktualisieren eines Beitrags mit der REST API aus, weshalb man sich anders helfen muss.
Das Problem mit save_post
Mit save_post
lässt sich grundsätzlich das Speichern von Inhalten manipulieren, bzw. erweitern. Leider wurde bei der WordPress REST API wieder nicht zu Ende gedacht und die Hook save_post
nicht ausgeführt.
Hier hilft nur eine Notlösung, die komischerweise angesteuert wird:
updated_postmeta
Diese Hook wird auch durch einen Request an die REST API angesteuert und lässt sich daher für unsere Zwecke verwenden. Die Hook bietet 4 Argumente, eines der Argumente ist die ID des Beitrags, also perfekt um etwas auszulösen, für einen bestimmten Beitrag.
Das Problem: Diese Hook wird immer ausgeführt wenn postmeta aktualisiert wird. Hier ist es also wichtig, dass man irgendwie ein Meta-Feld schafft oder verwendet, welches auch nur in bestimmten Fällen angesteuert, damit nicht jedes Mal etwas ausgeführt wird.
So lässt sich die Hook verwenden:
add_action('updated_postmeta', 'pixelbart_updated_postmeta', PHP_INT_MAX, 4);
function pixelbart_updated_postmeta(int $meta_id, int $post_id, string $meta_key, mixed $meta_value)
{
// Hier deinen Code ausführen
}
Code-Sprache: PHP (php)
Wie schon erwähnt, wird dieser Code dann IMMER ausgeführt, wenn ein Meta-Feld aktualisiert wird – weshalb ich immer prüfen würde, ob ein bestimmtes Feld aktualisiert wird. Beispielsweise:
add_action('updated_postmeta', 'pixelbart_updated_postmeta', PHP_INT_MAX, 4);
function pixelbart_updated_postmeta(int $meta_id, int $post_id, string $meta_key, mixed $meta_value)
{
if ('on' === $meta_value && 'mein_feld' === $meta_key) {
// Hier deinen Code ausführen
}
}
Code-Sprache: PHP (php)
So lässt sich zumindest vermeiden, dass dein Code bei jeder Aktualisierung ausgeführt wird. $meta_value
entspricht dem Wert, deines Meta-Feldes $meta_key
.
Der Vorteil: Die Hook wird auch ausgeführt, wenn man mit der REST API arbeitet.
Nützliche Links:
- updated_postmeta auf WordPress.org
- REST API Handbuch auf WordPress.org