新しい投稿を作成するときにsave_postアクションが発生するのはなぜですか?


31

save_post管理ダッシュボードの[新しい投稿]リンクをクリックすると、アクションに追加した私の機能が実行されることに驚かされます。注-これは、Saveまたはを押す前Updateであり、経過時間または自動更新の後ではなく、すぐに起動します。

一方、何かを入力してPublishor 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>";
}

この「YES」は、「新しい投稿」リンクを押すと(ページの上部に)エコーしますが、何かを入力してからUpdateまたはPublishまたはを押すとエコーしませんSave Draft。これは、save_postアクションとwp_insert_post()機能に関するドキュメントと矛盾しているようです。

誰も私のためにこれをクリアできますか?


驚くばかり!!!カスタムメタボックスフィールドを保存すると、同じ状況に陥ります。私が使用できるものは何ですか??
プラサートナダラジャ

回答:


39

[新しい投稿]をクリックすると、単にページが読み込まれますwp-admin/post-new.php

そうすることで、WordPressは常に新しい投稿(「自動ドラフト」)を作成して、実際に下書きを保存したり投稿を公開する前であっても、他のすべての機能(メディアアップロードなど)とプラグインが正常に機能するようにします

そして、これが順番にトリガーされますsave_post。したがって、エコー。

さて、更新または公開するときにエコーが表示されないのはなぜですか?

保存してから次のページを読み込むまでの間に、WordPressは実際GETには同じページにリダイレクトを送信しますが、これは透過的に表示されます(これはHttpFoxなどのHTTPモニターで確認できます)。

言い換えると;

  1. クリックするUpdatePublish
  2. ブラウザはサーバーにデータを送信します
  3. WordPressがそれを処理し、プロセス内でトリガーします save_post
  4. WordPressは、ブラウザー出力(エコーを含む)が発生する前にリダイレクトヘッダーを送り返し、終了します*
  5. ブラウザはリダイレクトに従い、「投稿の編集」ページを読み込みます。

リダイレクトは不要なように見えるかもしれませんが(POST同じページにしか移動できないため)、フォーム送信の重複を避けるためのPost / Redirect / Getとして知られる手法の一部です。

あなたに夢中関数の結果に基づいて、カスタムメッセージをプリントアウトしようとしている場合はsave_post、チェックアウト/答えをこれらの質問を

*厳密には真実ではありません。実際には、リダイレクトヘッダーが送信される前にエコーが発生しますが、ブラウザーはそれを破棄するか、非常に迅速に発生してレンダリングしません。


素晴らしい。このような完全かつ詳細な回答をありがとう!もっと学ぶために、そもそもどうやってこの知識に出会いましたか?
トム・オージェ

あなたが経験していたのと同じ不満から;)良いIDE(私はphpDesignerを使用しています)を手に入れ、関連する管理ファイルを掘り下げてください。
TheDeadMedic

1
兄弟に。あなたの専門知識を持ってそこにいてくれてありがとう!
トム・オージェ

素晴らしい情報。ローカルサーバーでは「正常」に動作しているように見えましたが、実稼働サーバーでは動作していなかったためです。リダイレクトヘッダーを送信します(理由はわかりません)。
WebMacheter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.