当我单击“管理仪表盘”中的“新帖子”链接时,我对save_post操作添加的功能将触发,这一事实让我感到惊讶。注意-这是在我按“保存”或“更新”之前,并且它立即触发,而不是在经过时间或自动更新之后触发。

另一方面,当我键入内容并按使用“发布”,“更新”或“保存草稿”按钮,我在动作处理程序中放入的echo语句不会回显,因此看来该动作在任何其他时间均未触发。这可能是无关的。

这是我的代码:

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


当我按“新帖子”链接,但在我键入内容然后按更新或发布或保存草稿时不会回显。这似乎与save_post操作和wp_insert_post()函数的文档相矛盾。

谁能为我清除此问题吗?

评论

太棒了!!!保存自定义metabox字段时,我遇到了同样的情况。知道我可以用什么吗?

#1 楼

当您单击“新建帖子”时,您只需加载页面wp-admin/post-new.php。这样做,WordPress将始终创建新帖子(“自动草稿”)以确保所有其他功能(例如(当媒体上传时)和插件正常工作,甚至在您实际保存草稿或发布帖子之前也是如此。因此,是您的回声。


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


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

换句话说,


您单击GETUpdate

浏览器将数据发送到服务器
WordPress处理它,并在此过程中触发Publish

WordPress发送返回重定向标头,然后退出,然后再出现任何浏览器输出(包括您的回声)*
浏览器遵循重定向并加载“编辑帖子”页面。可能只是将save_post移至同一页面),但这是称为“邮寄/重定向/获取”技术的一部分,可避免重复提交表单。挂钩到q431的函数2079q,请查看以下问题/答案。

*并非严格如此,您的回声实际上会在发送重定向标头之前发生,但是浏览器会丢弃它,或者事情发生得如此之快,永远渲染。

评论


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

–汤姆·俄格(Tom Auger)
2011年6月8日在20:14

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

–TheDeadMedic
2011年6月8日在20:31

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

–汤姆·俄格(Tom Auger)
2011年6月9日15:20

很棒的信息。我发疯了,因为在我的本地服务器上它似乎可以“正常”运行,但是在我的生产服务器中却无法...在我的本地服务器中看起来好像没有正确地应用post / redirect / get技术,因为它没有发送重定向标头(尽管不知道为什么)。

– WebMacheter
2011-12-15在6:20