ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PHP – WordPress – 插件小部件更新功能 – 更新数组值[Foreach循环不工作]

2019-09-01 22:33:33  阅读:203  来源: 互联网

标签:php function foreach wordpress-plugin


我正在开发一个带有小部件的wordpress插件.目前,小部件的更新功能如下所示.

function update($new, $old){
    $instance = $old;
    //Update Values
    $instance['element-one'] = $new['element-one'];
    $instance['element-two'] = $new['element-two'];
    $instance['element-three'] = $new['element-three'];
    $instance['element-four'] = $new['element-four'];
    //Return New Instance
    return $instance;

这应该是应该的.但我有一长串的元素,为了清洁代码我试图用一个简单的功能实现它们如下:

function update($new, $old){
    $instance = $old;
    //Update Values
    foreach($instance as $k => $v){
        $instance[$k] = $new[$k];
    }
    //Return New Instance
    return $instance;

虽然这似乎不起作用.如果我使用此功能,则不会更新Widget值.所以只是为了测试它是否按照我想要的方式工作……我写了一个工作正常的示例脚本.脚本如下.

$a = array(
  'a' => '1',
  'b' => '2',
  'c' => '3'
);

$b = array(
  'a' => 'A',
  'b' => 'B',
  'c' => 'C'
);

function swap_values($old, $new){
  $result = $old;
  foreach($result as $k => $v){
    $result[$k] = $new[$k];
  }
  return $result;
}

$res = swap_values($a, $b);
var_dump($res);

这个脚本工作正常,它交换数组的值,但似乎由于某种原因这在wordpress中表现不佳.

我在研究这个问题时意识到的另一个奇怪的事情是

>假设我在窗口小部件的窗体函数中的$instance数组中声明了一些元素,并且更新函数正在更新它们,如$instance [‘old’] = $instance [‘new’];它工作正常.此外,如果我已安装并激活插件,然后我更改更新功能以使用foreach循环,他们工作正常.
>但是在我更改了更新函数以使用foreach循环之后,如果我将更多元素添加到$instance数组,则它们不会被更新,而之前声明的元素是.
>另外,如果我在单独的wordpress安装上安装并激活此插件[更新更新函数以使用foreach循环]后,似乎没有任何元素更新.

我确信有一些我很想念的东西.非常感谢您的任何帮助或建议.

解决方法:

我找到了一个简单的解决方案:不要在小部件的扩展中包含更新功能.

核心只是将$new_instance变量作为默认值返回(wp-includes / widgets.php):

function update($new_instance, $old_instance) {
    return $new_instance;
}

我已经在我自己的小部件中成功测试了这一点,并确定制作自己的更新功能对于过滤用户输入很有用,但似乎没有必要.

标签:php,function,foreach,wordpress-plugin
来源: https://codeday.me/bug/20190901/1786561.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有