Te update_post_meta
haki są wywoływane z bardziej ogólny update_metadata()
funkcji, więc nie mógł znaleźć go bezpośrednio. Trzy haki to:
update_post_metadata
, filtr, który pozwala „przejąć” aktualizację metadanych i zrobić coś innego. Jeśli podłączysz funkcję, która zwraca wartość logiczną, wykonanie zatrzymuje się na niej i zwracana jest wartość logiczna.
update_post_meta
, akcja wywoływana przed zaktualizowaniem danych w bazie danych.
updated_post_meta
, akcja wywoływana po aktualizacji danych w bazie danych.
Jeśli klucz meta nie istnieje w bazie danych jeszcze, update_metadata()
przechodzi kontrolę add_metadata()
, która ma podobne haki add_post_metadata
, add_post_meta
i added_post_meta
. Dzieje się tak, zanim update[d]_post_meta
zostanie wywołany. Jeśli więc chcesz coś zrobić, gdy dodawany lub aktualizowany jest klucz meta , pamiętaj, aby podłączyć zarówno haki, jak update*
i add*
haki - ale zauważ, że podczas gdy akcje updated_*
i added_*
przekazują podobne parametry, update_*
a add_*
nie ( add_post_meta
najpierw nie przekazuje meta ID) .
delete_metadata()
ma podobne haki: delete_post_metadata
, delete_post_meta
i deleted_post_meta
.
Przykładowy kod:
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
użyciuupdate_metadata
i tam nie było haczykówadded_post_meta
iupdated_post_meta
ale to tak daleko, jak mogę dostać. Nie zrozumiałem, jak używać. Ale teraz myślę, że mam :)updated_{$post_type}_meta
Janowa odpowiedź obejmuje prawie wszystko powyżej, z wyjątkiem przypadku, gdy niestandardowe metadane są usuwane ze strony Edytuj wpis. Dzieje się tak asynchronicznie, jak tylko klikniesz przycisk „Usuń” pod metadanymi, poprzez połączenie z wp-admin / admin-ajax.php. Niestety, te wywołania omijają
delete_metadata()
funkcję w meta.php, adelete_meta()
zamiast tego w wp-admin / obejmuje / post.php (nie mylić z wp-include / post.php).Istnieją jednak 2 akcje, których można nadal użyć
delete_postmeta
(przed usunięciem) ideleted_postmeta
(po usunięciu). Oba akceptują pojedynczy parametr$mid
, który jest identyfikatorem metadanych (a nie klucza). Możesz pobrać obiekt metadanych, używając:który zwraca obiekt o meta_id, post_id, meta_key abd meta_value. Oczywiście do czasu, gdy
deleted_postmeta
nazywa się to, metadane zostały usunięte, więcget_post_meta_by_id()
nie będzie działać (co w pewien sposób czyni tę akcję bezużyteczną)To samo dotyczy aktualizacji niestandardowych metadanych ze strony Edytuj post.
update_metadata()
Funkcja (i jego działania) w meta.php się nie nazywa, aleupdate_meta()
funkcja w wp-admin / includes / post.php jest zamiast. Jeszcze dwie akcje tutajupdate_postmeta
iupdated_postmeta
. Argumentami są: $ meta_id, $ post_id, $ meta_key, $ meta_value.źródło