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

Posted

技术标签:

【中文标题】PHP - Wordpress - 插件小部件更新功能 - 更新数组值 [Foreach 循环不起作用]【英文标题】:PHP - Wordpress - Plugin Widget Update Function - Update array values [Foreach Loop not Working] 【发布时间】:2012-08-10 12:44:46 【问题描述】:

我正在开发一个带有小部件的 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 loop,它们就可以正常工作。 但是在我将更新函数更改为使用 foreach 循环之后,如果我向 $instance 数组添加更多元素,它们不会被更新,而之前声明的元素会被更新。 另外,如果我在单独的 wordpress 安装中安装并激活此插件 [在更新更新功能以使用 foreach 循环之后],则似乎没有任何元素更新。

我确信我缺少一些非常小的东西。您的任何帮助或建议将不胜感激。

【问题讨论】:

也许你应该把这个发到wordpress.stackexchange.com 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于PHP - Wordpress - 插件小部件更新功能 - 更新数组值 [Foreach 循环不起作用]的主要内容,如果未能解决你的问题,请参考以下文章

php EMPTY WIDGET用于在wordpress中创建单个小部件的插件代码。

如何为 WordPress 插件/小部件开发设置 Netbeans 项目

WordPress的基本空小部件插件

使用带有 Wordpress 插件的 ajax 重新加载

在 WordPress 中,文本小部件的内容存储在哪里?

Wordpress ajax->php 请求