我正试图找到为自定义帖子类型定制编辑帖子屏幕的最佳方法。
我想添加一个按钮,单击该按钮将触发代码,该代码将查找外部(非WP)数据库,获取一些数据,然后更新各种字段-核心WP字段和自定义元字段。理想情况下,更新应该更新编辑器中的字段,但在用户保存编辑(使用常规的“更新”按钮)之前,不要将任何内容提交到WP数据库。
到目前为止,我已经尝试在metabox中添加一个提交按钮,然后连接到“wp\\u insert\\u post\\u data”。这是可行的,但如果我不想编辑任何字段,我会收到一条浏览器消息“如果您离开此页面,您所做的更改将丢失”。
至于更新数据,我正在更新$post,方法是挂接到“dbx\\u post\\u advanced”,并添加自己的过滤器以挂接到我的自定义元字段,这将更新字段中的内容,而不更新数据库。同样,这是可行的,但“dbx\\u post\\u advanced”感觉有点粗糙,因为它深深地埋藏在编辑表单advanced中。php,我找不到关于它的用途的文档。
有没有更好的方法来实现这一点,或者至少有某种方法来避免浏览器抱怨我正在从我编辑过的页面移开?
最合适的回答,由SO网友:Joe Izzard 整理而成
将下面的Javascript代码添加到提交按钮。这将删除提供警告的事件。请注意,此代码未经测试。
window.onbeforeunload = null;
这应该禁用属性,但是如上所述,此代码未经测试
干杯,
乔
SO网友:rowatt
为了子孙后代,如果有人发现了这一点,我得出的结论是,我最初的方法是有缺陷的。虽然我可以阻止浏览器抱怨某个字段已使用@JoeIzzard建议的解决方案进行了更改,但在帖子编辑屏幕上有一个提交按钮与WordPress的帖子更新紧密相连,我发现我不得不竭尽全力绕过WordPress试图保存所有内容。
相反,我决定采用以下方法,目前为止,这些方法正在按要求工作。
使用定位标记和按钮类(即。<a href="#" class="button">Clickme</a>
)将jquery点击处理程序绑定到该按钮(即。jQuery(\'#buttonid\').click( function(e){...});)
)在该点击处理程序中,对一个PHP函数进行ajax调用,该函数由WordPress的wp_ajax_
处理程序通过该PHP函数,我可以执行任何需要执行的操作,并返回一个json对象,其中包含任何字段值,这些字段值应该在jQuery ajax中更改done
处理程序根据需要更新字段,这种方法允许我在编辑后屏幕上执行任何我想要的操作,而无需绕过WordPress的正常保存后例程。
如果我真的想同时更新帖子字段,那么我原来的方法可能会更好,而Joe的建议可以防止在字段被编辑后出现任何浏览器投诉。