New Plugin Review

时间:2020-06-19 作者:Miguel

我是php和WP插件开发新手。

我已经将我的第一个插件发送到WordPress插件目录进行审查。

除其他外,他们发表了以下评论:

"E;您还必须避免在函数之外检查post提交。这样做意味着每次加载插件时都会进行检查,这意味着每个使用插件查看站点上任何页面的人都会检查提交内容。这样做会使您的代码对于任何高流量站点上的用户来说都变得缓慢和笨拙,从而导致不稳定和崩溃"E;

有人能解释一下这是什么意思吗?对不起,我真的是个新手。。。

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

现在我看到了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端点,但这依赖于客户端脚本

    (然而,我不相信他们的评论,即这将使您的代码变得缓慢和笨拙,除非PHP lazy初始化$\\u POST global,因为这样做很昂贵,而且我无法想象它是懒惰的还是昂贵的,除了文件上传)