为什么我不能在admin_init之后连接到save_post?

时间:2011-05-07 作者:danblaker

我试图从插件中的AJAX回调中钩住“save\\u post”操作,但它似乎不起作用。事实上,连接到“save\\u posts”似乎只在几个关键操作执行点(例如“init”或“admin\\u init”)起作用,而在其他点(例如“add\\u meta\\u box”回调)起不到作用。

在我的特殊情况下,我想单击Edit Post屏幕上的一个按钮来添加一个新的自定义metabox,并让它正确保存metabox的数据。当然,当我单击该按钮并添加该元盒时,我已经钩住了“save\\u post”操作一次,WP似乎不想让我再次钩住它。

简单地浏览一下WP源代码,我看不出任何明显的原因,为什么我不能再次钩住该操作。有什么想法可以绕过这个明显的限制,或者至少可以解释为什么它不起作用?

2 个回复
最合适的回答,由SO网友:Rarst 整理而成

将函数添加到挂钩是运行时操作,它不是持久的。无论您在Ajax操作中运行何种挂钩操作,它们都在单独的WP实例中执行,并在返回Ajax响应后立即过期。它们对当前加载的页面没有影响。

您可能需要将功能挂钩到save_post 像往常一样(不在Ajax操作中),检查是否有额外的metabox来处理它。

SO网友:akamaozu

我真的是在一个相关的问题上绞尽脑汁,这是我在网上读到的第一件事,它给了我一个坚实的指针,指出了我做错了什么。

结果是add_meta_boxes 调用时间晚于save_post, 因此,您需要在创建metabox之前设置保存挂钩。乍一看似乎有悖常理,但标记通常是在Wordpress经过处理后生成的,因此在呈现metabox之前设置挂钩是有意义的。

谢天谢地,我在admin_init 钩子,在save_post 因此,解决手头的问题变得非常容易。

再次感谢您发布此问题。这并不完全是我想要的,但它暗示了问题的答案。

结束