我正在努力帮助同事与OO达成协议,我发现在某些情况下,很难找到标签(或标记)界面概念的可靠实际示例.(不包含任何方法的接口;仅用作标记或标记或标记).虽然我们讨论的内容确实无关紧要,但我们使用PHP作为讨论背后的平台(因为它是我们之间的共同语言).我可能不是教OO的最佳人选,因为我的大部分背景都是高度理论化的,大约15岁,但我就是他所拥有的.
在任何情况下,我发现关于标签接口的讨论缺乏让我相信它甚至没有被充分利用以保证讨论.我错了吗?
我正在尝试在管理面板"编辑帖子"页面中验证自定义帖子类型的字段.
当用户单击"发布"时,我想验证POST数据中的字段,如果数据未通过测试,则将post_status更改为"pending".发生这种情况时,我还想在管理通知区域中向页面添加错误.
我一直在尝试使用"wp_insert_post"动作的附加钩子,这也保存了我们自己的数据.我不确定操作的顺序,但我假设wp_insert_post事件首先发生,然后我的函数通过钩子调用.
问题是它是Wordpress函数正在进行发布后的操作,所以当我获得验证数据时,Wordpress已经保存了状态为"发布"的帖子.我需要做的是阻止更新,或者将状态更改回"待定",但我在API中找到一种方法没有成功.
所以,这是我想要影响的操作顺序:
1. admin user edits post data and clicks "Publish"
2. via wp_insert_post, my data validation and post meta save routine is called
3. If data passes validation, post status is "published"
4. Otherwise, post status set to "pending" & message shown in admin notice area
Run Code Online (Sandbox Code Playgroud)
当然有人已经做到了这一点,但广泛的谷歌搜索引导我看到相同的看似无关紧要的页面.有人能指出我在正确的方向吗?提前致谢-
更新:
所以,RichardML确实是正确的,挂钩到wp_insert_post_data过滤器给了我正确的位置来验证管理员帖子编辑页面字段.我正在更新这个,但要注意解决方案的其余部分,特别是在管理通知区域中报告原因.
首先,您不能只输出数据或设置字段,因为管理页面是重定向的结果,当您再次呈现管理员帖子页面时,admin_notices操作已经消失.这个伎俩是我从另一个论坛中挑选出来的,而且它是hackish,但它确实有效.
您需要做的是在验证过滤器功能中,如果您确定需要显示错误,请使用set_option()添加具有唯一名称的博客选项(我使用'publish_errors').这应该是带有"错误"类的div中的HTML代码.
您还需要为'admin_notices'添加一个动作挂钩,指向检查'publish_errors'选项是否存在的函数,如果找到它,则将其打印到页面并使用delete_option()删除它.