Jestem zaskoczony faktem, że moja funkcja, którą podłączyłem do save_post
akcji, uruchamia się po kliknięciu linku „Nowy wpis” w panelu administracyjnym. Uwaga - dzieje się to przed naciśnięciem przycisku Savelub Updatei uruchamia się natychmiast, nie po upływie czasu lub automatycznej aktualizacji.
Z drugiej strony, gdy ja wtedy wpisać w coś, a następnie naciśnij Publishlub Updatelub Save Draftprzycisków, instrukcja echo Mam umieścić w moim obsługi akcji nie odzwierciedlają się, więc wydaje się, że akcja nie jest wypalanie w dowolnym innym momencie. Może to być niezwiązane.
Oto mój kod:
add_action('save_post', 'MyNS\save_event_metabox', 10, 2);
function save_event_metabox($post_id, $post){
echo "<h1>YES!</h1>";
}
To TAK powtarza się (u góry strony), gdy kliknę link „Nowy post”, ale NIE echo, gdy coś wpisuję, a następnie naciskam Updatelub Publishlub Save Draft. Wydaje się to sprzeczne z dokumentacją save_post
akcji i wp_insert_post()
funkcji.
Czy ktoś może mi to wyjaśnić?
Odpowiedzi:
Kiedy klikniesz „Nowy post”, po prostu ładujesz stronę
wp-admin/post-new.php
.Czyniąc tak, WordPress zawsze będzie tworzyć nowy post (an „Auto Draft”) w celu zapewnienia, że wszystkie inne funkcje (takie jak przesyłanych mediach) oraz wtyczek pracę jako normalne, nawet przed tobą rzeczywiście zapisać wersję roboczą lub opublikować post.
A to z kolei wyzwala
save_post
. Stąd twoje echo.Pomiędzy zapisywaniem a ładowaniem następnej strony, WordPress faktycznie wysyła
GET
przekierowanie z powrotem do tej samej strony, która wydaje się przezroczysta (możesz to zobaczyć na monitorze HTTP, takim jak HttpFox ).Innymi słowy;
Update
lubPublish
save_post
Przekierowanie może wydawać się niepotrzebne (ponieważ możesz po prostu
POST
przejść do tej samej strony), ale jest to część techniki znanej jako Post / Redirect / Get w unikaniu powielania formularzy .Jeśli próbujesz wydrukować niestandardowe wiadomości w oparciu o wynik funkcji, do której się przyczepiłeś
save_post
, sprawdź te pytania / odpowiedzi .* Nie do końca prawda, twoje echo faktycznie pojawi się przed wysłaniem nagłówka przekierowania, ale przeglądarka albo go odrzuci, albo rzeczy dzieją się tak szybko, że nigdy się nie renderuje.
źródło