[英]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
他們工作正常。 $instance
數組,它們沒有被更新,而之前聲明的元素是。 我確信有一些我很想念的東西。 非常感謝您的任何幫助或建議。
我找到了一個簡單的解決方案:不要在小部件的擴展中包含更新功能。
核心只是將$ new_instance變量作為默認值返回(wp-includes / widgets.php):
function update($new_instance, $old_instance) {
return $new_instance;
}
我已經在我自己的小部件中成功測試了這一點,並確定制作自己的更新功能對於過濾用戶輸入很有用,但似乎沒有必要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.