próbuję przechwycić, gdy post jest aktualizowany, ale wszystkie zaczepy próbuję nigdy nie wykonać, z wyjątkiem updated_post_meta
add_action('updated_post_meta', 'my_function');
function my_function($post_id) {
echo 'This is my post ID : '.$post_id;
}
Próbowałem tego, add_action('save_post', 'my_function');
ale żaden identyfikator nie został wyrenderowany, a może ta wiadomość już się echa, ale nigdy nie wyświetla się z powodu wysłania nagłówka przekierowania.
save_post
, czy to jest literówka, czy też w twoim oryginalnym kodzie? także włączyć debugowanie przy opracowywaniu.Odpowiedzi:
Gdy post jest aktualizowany, uruchamiane są pewne haki:
'pre_post_update'
to akcja uruchamiana tuż przed aktualizacją posta, przekazany argument to 2:$post_ID
i$data
jest to tablica wszystkich innych kolumn bazy danych tabeli postów'transition_post_status'
jest hakiem uruchamianym podczas aktualizacji i przekazuje 3 argumenty: $ new_post_status$old_post_status
i$post
(obiekt)."{$old_status}_to_{$new_status}"
a"{$new_status}_{$post->post_type}"
. Najpierw przekaż jako argument jedyny obiekt post, drugi przekaż identyfikator post i obiekt post. Znajdź dokumentację tutaj .'edit_post'
które przekazują 2 argumenty:$post_ID
i$post
(obiekt)'post_updated'
które przechodzą 3 argumenty$post_ID
,$post_after
(po przedmiot po aktualizacji),$post_before
(po przedmiot przed aktualizacją)"save_post_{$post->post_type}"
to zależy od postu typu, na przykład dla standardowych stanowisk jest'save_post_post'
i dla stron jest'save_post_page'
, Hak ten Pass 3 argumenty$post_ID
,$post
(object) i$update
jest to wartość logiczna (prawda czy fałsz), która jest prawdziwa, kiedy wykonać aktualizację, w fakt, że ten hak jest uruchamiany również wtedy, gdy post jest zapisywany po raz pierwszy.save_post
' jest uruchamiany zarówno podczas aktualizacji, jak i przy pierwszym zapisywaniu, i przekazuje te same 3 argumenty z poprzedniego przechwytywania.save_post_{$post_type}
' jest uruchamiany zarówno podczas aktualizacji, jak i przy pierwszym zapisywaniu, i przekazuje te same pierwsze 2 argumenty poprzedniego zaczepu.wp_insert_post
' , który jest uruchamiany zarówno przy aktualizacji, jak i przy pierwszym zapisywaniu, i przekazujesz te same 3 argumenty z poprzednich 2 przechwyceń.Te haki są uruchamiane za każdym razem, gdy post jest aktualizowany, zarówno przez strony administracyjne w backend, jak i po aktualizacji „ręcznie” za pomocą
wp_update_post
lubwp_insert_post
funkcji.Gdy post jest aktualizowany za pomocą stron administracyjnych, uruchamiane są dodatkowe haki, przykładem jest
'update_post_redirect'
lub'post_updated_messages'
. (Patrz to i to WPSE odpowiedzi na przykłady stosowania).Zauważ, że jeśli chcesz skorzystać z argumentu hooks, nie jest to pierwszy, musisz jawnie zadeklarować go w
add_action
wywołaniu.Np. Jeśli chcesz użyć
'$update'
argumentu (to jest 3)'save_post'
zaczepu, musisz dodać3
jako$accepted_args
parametradd_action
( patrz dokumenty ):Ostatnia uwaga dotyczy czasu : musisz upewnić się, że
add_action
jest wywoływany przed uruchomieniem akcji, inaczej nie zrobi nic.Np. Ten kod:
nic nie zrobi, ponieważ akcja jest dodawana po wystrzeleniu haka. Tutaj łatwo go rozpoznać, w prawdziwym świecie kod nie zawsze jest taki.
źródło
function save_post_test( $post_id, $post, $update ) { print ' post_id : '; var_export( $post_id ); print ' post : '; var_export( $post ); print ' update : '; var_export( $update ); wp_die( 'save_post hook runs when you click Add New..' ); } add_action( 'save_post', 'save_post_test', 10, 3 );
Dlaczego akcja „zapisz_post” działa na Dodaj nowy zamiast na Publikuj? Żeby zrobić post auto-draftu, jak sądzę.Dlaczego nie w hak
post_updated_messages
. W ten sposób możesz wyświetlić tę wiadomość tak, jak zaktualizowano domyślny post Wordpress.Poszukaj tutaj przykładu:
http://codex.wordpress.org/Function_Reference/register_post_type
pod
post_updated_messages
źródło