我正在开发一个带有小部件的 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 中表现不佳。
我在做这件事时意识到的另外一些奇怪的事情是
- 如果假设我在小部件的
$instance
数组中声明了一些元素form function
,并且更新函数正在更新它们,就像$instance['old'] = $instance['new'];
它工作正常一样。另外,如果我安装并激活了插件,然后我更改更新功能以使用foreach loop
它们工作正常。 - 但是,在我将更新函数更改为使用 foreach 循环之后,如果我向
$instance
数组中添加更多元素,它们不会被更新,而之前声明的元素是。 - 此外,如果我在单独的 wordpress 安装上安装并激活此插件 [在更新更新功能以使用 foreach 循环之后],则似乎没有任何元素更新。
我确信我缺少一些非常小的东西。您的任何帮助或建议将不胜感激。