簡體   English   中英

PHP - Wordpress - 插件小部件更新功能 - 更新數組值[Foreach循環不工作]

[英]PHP - Wordpress - Plugin Widget Update Function - Update array values [Foreach Loop not Working]

我正在開發一個帶有小部件的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中表現不佳。

我在研究這個問題時意識到的另一個奇怪的事情是

  • 如果假設我在窗口小部件的form function中的$instance數組中聲明了一些元素,並且更新函數正在更新它們,如$instance['old'] = $instance['new']; 它工作正常。 此外,如果我已安裝並激活插件,然后我更改更新功能以使用foreach loop他們工作正常。
  • 但后來我更改了更新函數以使用foreach循環,如果我將更多元素添加到$instance數組,它們沒有被更新,而之前聲明的元素是。
  • 此外,如果我在單獨的wordpress安裝上安裝並激活此插件[在更新更新函數以使用foreach循環之后],似乎沒有任何元素更新。

我確信有一些我很想念的東西。 非常感謝您的任何幫助或建議。

我找到了一個簡單的解決方案:不要在小部件的擴展中包含更新功能。

核心只是將$ new_instance變量作為默認值返回(wp-includes / widgets.php):

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

我已經在我自己的小部件中成功測試了這一點,並確定制作自己的更新功能對於過濾用戶輸入很有用,但似乎沒有必要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM