为什么创建新帖子时会触发save_post动作?


31

save_post当我单击“管理仪表盘”中的“新帖子”链接时,我已添加到动作上的功能就会触发,这让我感到惊讶。注意-这是在我按下Save或之前Update,并且它会立即触发,而不是经过一段时间或自动更新之后。

另一方面,当我键入一些内容并按PublishUpdateSave Draft按钮时,我在动作处理程序中放入的echo语句不会回显,因此看来该动作在任何其他时间均未触发。这可能是无关的。

这是我的代码:

add_action('save_post', 'MyNS\save_event_metabox', 10, 2);
function save_event_metabox($post_id, $post){
  echo "<h1>YES!</h1>";
}

这是回声(在页面的顶部)时,我按下了“新帖”链接,但是当我输入一些东西,然后按不回UpdatePublishSave Draft。这似乎与有关save_post操作和wp_insert_post()功能的文档相矛盾。

谁能为我解决这个问题?


太棒了!!! 保存自定义metabox字段时,我遇到了同样的情况。任何想法,我可以使用?
Prasath Nadarajah 2012年

Answers:


39

当您点击“新帖子”时,您只需加载页面wp-admin/post-new.php

为此,WordPress始终会创建一个新帖子(“自动草稿”)以确保所有其他功能(例如媒体上传)和插件都可以正常工作,甚至在实际保存草稿或发布该帖子之前也是如此。

而这又触发了save_post。因此,您的回声。

好的,为什么在更新或发布时没有收到回声?

在保存和随后的页面加载之间,WordPress实际上正在将GET重定向发送回同一页面,该页面看起来是透明的(您可以使用HTTP监视器(例如HttpFox)进行见证)。

换一种说法;

  1. 您单击UpdatePublish
  2. 浏览器将数据发送到服务器
  3. WordPress处理它,并在此过程中触发 save_post
  4. WordPress在发送任何浏览器输出(包括您的回声)之前发送回重定向标头,然后退出*
  5. 浏览器遵循重定向并加载“编辑帖子”页面。

重定向似乎是不必要的(因为您只能POST到同一页面),但这是避免重复提交表单的一种称为Post / Redirect / Get的技术。

如果您尝试根据所连接功能的结果打印出自定义消息save_post,请查看这些问题/答案

*并非完全正确,您的回声实际上会在发送重定向头之前发生,但是浏览器会丢弃它,或者事情发生得如此之快,使其永不呈现。


优秀。感谢您提供完整而详细的答案!为了学习更多,您是如何首先了解这些知识的?
Tom Auger

通过同样的挫败感,您正在体验;)掌握一个好的IDE(我使用phpDesigner),然后深入研究相关的管理文件。
TheDeadMedic 2011年

1
对兄弟。感谢您的专业知识!
Tom Auger

很棒的信息。我发疯了,因为在我的本地服务器中它似乎可以“正常”运行,但是在我的生产服务器中却没有......在我的本地服务器中,它似乎没有正确地应用post / redirect / get技术,因为它没有发送重定向标头(尽管不知道为什么)。
WebMacheter 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.