我的插件在屏幕上显示“您确定要这样做吗”,并显示“参数#2不是load.php中的数组”。

时间:2017-11-16 作者:Rick Hellewell

我正在开发的插件存在问题,以及“您确定要这样做吗?”消息

这不是我的第一个插件,它遵循一般的开发准则。插件的功能是在插件设置屏幕上的按钮上执行数据库查询。所有功能正常。

按钮按下功能(在表单中)在设置页面上显示表单/按钮。表单的操作是针对自身的,因此插件设置页面显示在按钮按下/表单提交上(在执行按钮/提交所需的功能后)。

我注意到以下几点

无法在插件屏幕上停用插件-屏幕已显示,但没有停用消息,插件仍处于活动状态。插件停用代码是标准的,符合Codex;没什么特别的,只需停用即可

  • 此错误消息位于wp admin错误日志中:
  • “PHP警告:数组#合并():参数#2不是/[特定文件位置编辑]/wp includes/load.PHP第664行的数组”

    设置页面上的表单中没有临时检查(以前是,但在测试过程中删除了该检查,但没有任何效果)(是的,我知道风险;调试时不存在临时检查,表单中的Post值已在其他地方清除。)

    没有check_admin_referer() 我的插件中的代码

    通过手动删除插件文件夹,我已经验证了导致错误的插件

    这不是权限错误

    问过谷歌;没有什么有用的。

    我应该在我的插件代码中寻找什么(太长,无法在这里复制)?按钮的表单应该在哪里优化显示(或者甚至与错误相关)?

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

    问题似乎与我使用此代码有关:

    $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING) ;
    $_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING) ;
    
    我把它放在插件的顶部(插件的类之外);我用它来清理任何GET和POST值。

    当您执行任何导致$\\u帖子的操作(如帖子或页面发布或插件停用)时wp_magic_quotes() 负载中的功能。php被调用(通过check_admin_referer() 函数,对所有页面上的所有$\\u帖子调用,包括发布和插件停用帖子):

    // code fragment from wp_magic_quote() in load.php
    // Force REQUEST to be GET + POST.
    $_REQUEST = array_merge( $_GET, $_POST );
    
    我的filter_input_array 代码(我用来清理$\\u get和$\\u post)导致array_merge() 不是数组,这导致此错误显示在wp admin文件夹错误日志中:

        "PHP Warning: array_merge(): Argument #2 is not an array 
    in /[specific file location redacted]/wp-includes/load.php 
    on line 664\'
    
    通过移动filter_input_array 语句(上面的第一个代码块)在检查插件设置表单上的提交按钮时,错误消失了。显然,我的filter_input_array 语句与冲突wp_magic_quotes 使用$\\u POST参数。

    移动我的filter_input_array “check for the plugin settings page button submit”(检查插件设置页面按钮提交)中的语句似乎已修复该问题。

    结束

    相关推荐