现在我看到了your code, 我认为审稿人错了:
他们在谈论agg-as-options.php, 这是按照我在下面描述的方式处理的,除非他们错了:
- 表单是在agg\\u options函数中处理的,而不是在他们所说的函数之外。这只在admin aggregate options页上显示和处理,即仅针对该页上的管理员用户,而不是所有访问者
(您的括号缩进在整个过程中并不完全清楚,但即使乍一看也应该很明显。)
您正在将agg作为选项加载。php,即使我们不在管理站点;你可以明确地把它放在if ( is_admin() ) {
测试(这意味着管理站点,而不是管理权限)我想这大概是this question (我能找到的第一个例子):您在页面上生成一个表单,将其发回同一页面,您有一些代码类似于if ( isset( $_POST[\'miguels_form\'] ) ) {
在从该表单中查找提交内容并进行处理的插件中,“miguels\\u form”是一个隐藏字段或提交按钮值,用于标识来自该特定表单的提交内容。该代码位于插件的顶层,即在加载插件时,它将在所有页面上运行,而不仅仅是在显示表单的页面上运行
我链接的问题中的方法是将$\\u POST处理程序移动到首先呈现表单的短代码中,或者移动到一个单独的短代码中,只处理帖子并输出“谢谢”消息。这应该解决他们关于此代码不在函数中的注释。或者可能有其他主题或挂钩机制将此限制为单个页面。
我第一次看到这种模式时,我不喜欢,但我不确定有没有更好的方法:
您可以编写一些脚本,将表单数据作为JSON发布到新的REST API端点或旧样式的admin ajax端点,但这依赖于客户端脚本或者您可以发布到非WordPress PHP文件,但我也不喜欢这样所以我想这种模式是可以的:他们只是想让你将表单帖子的检查限制在你要发布到的页面上。我不知道有什么更好的没有脚本的方法可以做到这一点。
(然而,我不相信他们的评论,即这将使您的代码变得缓慢和笨拙,除非PHP lazy初始化$\\u POST global,因为这样做很昂贵,而且我无法想象它是懒惰的还是昂贵的,除了文件上传)