Die update_post_meta
Hooks werden von der allgemeineren update_metadata()
Funktion aufgerufen , sodass Sie sie möglicherweise nicht direkt gefunden haben. Die drei Haken sind:
update_post_metadata
, ein Filter, mit dem Sie das Metadaten-Update "hijacken" und etwas anderes tun können. Wenn Sie eine Funktion einbinden, die einen Booleschen Wert zurückgibt, wird die Ausführung dort angehalten und der Boolesche Wert zurückgegeben.
update_post_meta
Eine Aktion, die aufgerufen wird, bevor die Daten in der Datenbank aktualisiert werden.
updated_post_meta
Eine Aktion, die aufgerufen wird, nachdem die Daten in der Datenbank aktualisiert wurden.
Wenn die Meta - Taste nicht noch in der Datenbank vorhanden ist , update_metadata()
wird die Steuerung an add_metadata()
, die die ähnlichen Haken hat add_post_metadata
, add_post_meta
und added_post_meta
. Dies geschieht, bevor es update[d]_post_meta
aufgerufen wird. Wenn Sie also etwas tun möchten, wenn der Metaschlüssel hinzugefügt oder aktualisiert wird, müssen Sie sowohl den update*
als auch den Hook add*
einbinden. Beachten Sie jedoch, dass die updated_*
und added_*
-Aktionen ähnliche Parameter übergeben update_*
und add_*
nicht ( add_post_meta
übergibt zuerst keine Meta-ID). .
delete_metadata()
hat ähnlichen Haken: delete_post_metadata
, delete_post_meta
und deleted_post_meta
.
Beispielcode:
add_action( 'added_post_meta', 'wpse16835_after_post_meta', 10, 4 );
add_action( 'updated_post_meta', 'wpse16835_after_post_meta', 10, 4 );
function wpse16835_after_post_meta( $meta_id, $post_id, $meta_key, $meta_value )
{
if ( 'wpse16835_meta_key' == $meta_key ) {
wpse16835_do_something( $post_id, $meta_value );
}
}
add_action( 'deleted_post_meta', 'wpse16835_deleted_post_meta', 10, 4 );
function wpse16835_deleted_post_meta( $deleted_meta_ids, $post_id, $meta_key, $only_delete_these_meta_values )
{
if ( 'wpse16835_meta_key' == $meta_key ) {
wpse16835_undo_something( $post_id );
}
}
update_post_meta
verwendenupdate_metadata
und dort gibt es Hakenadded_post_meta
und ,updated_post_meta
aber das ist so weit wie ich bekommen konnte. Ich habe nicht verstanden, wie man es benutzt. Aber jetzt denke ich, dass ich es habe :)updated_{$post_type}_meta
Die Antwort von Jan deckt so ziemlich alles oben ab, mit Ausnahme des Falls, dass benutzerdefinierte Metadaten von der Seite "Beitrag bearbeiten" gelöscht werden. Dies geschieht asynchron, sobald Sie über einen Aufruf von wp-admin / admin-ajax.php unter den Metadaten auf die Schaltfläche "Löschen" klicken. Leider umgehen diese Aufrufe die
delete_metadata()
Funktion in meta.php unddelete_meta()
rufen stattdessen wp-admin / includes / post.php auf (nicht zu verwechseln mit wp-includes / post.php).Es gibt jedoch zwei Aktionen, die
delete_postmeta
(vor dem Löschen) unddeleted_postmeta
(nach dem Löschen) noch verwendet werden können. Beide akzeptieren einen einzelnen Parameter$mid
, nämlich die ID der Metadaten ( nicht den Schlüssel). Sie können das Metadatenobjekt wie folgt abrufen:Das gibt ein Objekt mit meta_id, post_id, meta_key und meta_value zurück. Natürlich werden
deleted_postmeta
die Metadaten zum Zeitpunkt des Aufrufs gelöscht, sodassget_post_meta_by_id()
sie nicht mehr funktionieren (was diese Aktion irgendwie unbrauchbar macht).Gleiches gilt für die Aktualisierung benutzerdefinierter Metadaten über die Seite "Beitrag bearbeiten". Die
update_metadata()
Funktion (und ihre Aktionen) in meta.php wird nicht aufgerufen, sondern dieupdate_meta()
Funktion in wp-admin / includes / post.php. Hier nochmal zwei Aktionen,update_postmeta
undupdated_postmeta
. Die Argumente sind $ meta_id, $ post_id, $ meta_key, $ meta_value.quelle