save_post
アクションに追加した自分の機能が、管理ダッシュボードの[新規投稿]リンクをクリックしたときに起動するという事実に驚きました。注 - これは私が押す前です Save または Updateそして、経過時間や自動更新の後ではなく、すぐに起動します。
一方で、何かを入力して Publish または Update または Save Draft ボタン、アクションハンドラの中に置いたecho文はエコーアウトしないので、それ以外のときにはアクションは発生していないようです。これは無関係かもしれません。
これが私のコードです:
add_action('save_post', 'MyNS\save_event_metabox', 10, 2);
function save_event_metabox($post_id, $post){
echo "<h1>YES!</h1>";
}
この「はい」は、「新しい投稿」リンクを押したときに(ページ上部に)表示されますが、何かを入力してからを押したときには表示されません。 Update または Publish または Save Draft。これはsave_post
アクションとwp_insert_post()
関数に関するドキュメントと矛盾するようです。
誰もが私のためにこれを片付けることができますか?
[新しい投稿]をクリックすると、単にページwp-admin/post-new.php
が読み込まれます。
そうすることで、WordPressは常に新しい投稿( '自動ドラフト')を作成し、他のすべての機能(メディアのアップロードなど)やプラグインが通常どおりに動作するようにします。 you 実際にドラフトを保存するポスト。
そしてこれが、今度はsave_post
をトリガーします。それであなたのエコー。
それでは、更新または公開時にエコーが表示されないのはなぜですか。
保存から次のページロードまでの間に、WordPressは実際には同じページにGET
リダイレクトを送信します。これは透明に見えます(これは HttpFox などのHTTPモニターで確認できます)。
言い換えると;
Update
またはPublish
をクリックしたsave_post
をトリガーしますリダイレクトは不要に思えるかもしれませんが(同じページにPOST
を付けることができるため)、 Post/Redirect/Get として知られる手法の一部であり、 フォームの重複送信 を避けます。
save_post
にフックされた関数の結果に基づいてカスタムメッセージをプリントアウトしようとしているなら、 これらの質問/回答 をチェックしてください。
*厳密には真実ではない、あなたのエコーは実際にはリダイレクトヘッダが送信される前に発生しますが、ブラウザはそれを捨てるでしょう、あるいは事態はそれほど速くレンダリングされません。