我很惊讶我的函数save_post
当我单击管理仪表板中的“新建帖子”链接时,将触发操作。注意-这是在我按下Save(保存)或Update(更新)之前,它会立即启动,而不是在经过一段时间或自动更新之后。
另一方面,当我随后键入一些内容并按下发布、更新或保存草稿按钮时,我放在动作处理程序中的回显语句不会回显,因此该动作似乎在任何其他时间都不会触发。这可能是无关的。
这是我的代码:
add_action(\'save_post\', \'MyNS\\save_event_metabox\', 10, 2);
function save_event_metabox($post_id, $post){
echo "<h1>YES!</h1>";
}
当我按“New Post”链接时,此“YES”(是)会回显(在页面顶部),但当我键入内容,然后按“Update”(更新)或“Publish”(发布)或“Save Draft”(保存草稿)时,此“YES”(是)不会回显。这似乎与
save_post
行动与未来
wp_insert_post()
作用
有人能帮我澄清一下吗?
最合适的回答,由SO网友:TheDeadMedic 整理而成
单击“新建帖子”时,您只需加载页面wp-admin/post-new.php
.
在这样做的过程中,WordPress将始终创建一篇新文章(“自动草稿”),以确保所有其他功能(如媒体上传)和插件正常工作,甚至在您实际保存草稿或发布文章之前。
而这反过来又会触发save_post
. 这就是你的回声。
好吧,为什么我在更新或发布时没有收到回音?
在保存和后续页面加载之间,WordPress实际上发送了GET
重定向回显示为透明的同一页面(您可以通过HTTP监视器看到这一点,例如HttpFox).
换句话说;
单击Update
或Publish
浏览器将数据发送到服务器WordPress处理数据,并在处理过程中触发save_post
在出现任何浏览器输出(包括您的回音)之前,WordPress会发回重定向标题并退出)*
浏览器遵循重定向并加载“编辑帖子”页面重定向似乎没有必要(因为您可以
POST
但这是一种称为
Post/Redirect/Get 在避免
duplicate form submissions.
如果您试图根据连接到的函数的结果打印自定义消息save_post
, 退房these questions/answers.
*严格来说,这并不是真的,您的回音实际上会在发送重定向标头之前发生,但浏览器会放弃它,或者事情发生得太快而无法呈现。