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

标签 php function foreach wordpress

我正在开发一个带有小部件的 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;

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

$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 中似乎表现不佳。

我在做这件事时意识到的另一件奇怪的事情是

  • 假设我在小部件的 form function 中的 $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 - Wordpress - 插件小部件更新功能 - 更新数组值 [Foreach 循环不工作],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11948682/

相关文章:

php - 我可以对 Symfony + Doctrine 进行哪些性能改进?

PHP 和 Netbeans - 使用 sftp 或 svn 获取远程资源

php - 从字符类中减去

Javascript 函数未在 document.ready jquery 代码中定义

python pandas DataFrame 遍历行并比较两列并应用函数

c++ - 如何将字符空间动态分配给结构字段

javascript - forEach 在 JSX 中的 es6 映射

PHP MySQL - 通过数组更新数据

c# - TypeScript 中是否有类似于 C# 实现的 foreach 构造?

javascript - 从 JS 配置对象中提取数据以创建新对象