2013-11-21 70 views
0

我正在使用WordPress Settings API來存儲設置值。如果一個選項表單有10個表單元素,這意味着我需要有10次add_settings_field每個都有自己的ID。這意味着爲了讀取設定值,我還需要提出10 get_option請求,例如,如果我在ajax請求中需要這些設置值。Wordpress設置API和序列化數據

我該如何使用WordPress Settings API將數據序列化,並將這些值存儲在一個數據庫行中,並將數據庫請求的數量限制在最小值?

+0

你可以很容易地把它保留爲10行,但得到/設置1請求。 – h2ooooooo

+0

你會怎麼做? –

+0

嗯 - 獲取它可以緩存('wp_get_alloptions'),但設置似乎需要10個不同的設置調用(以調用適當的操作等)。當第一次閱讀你的問題時,我理解它,因爲你需要通過AJAX單獨獲取/保存每個選項(並且沒有理由這麼做)。 – h2ooooooo

回答

0

我用下面的代碼片段解決我的問題:

$required_options = array("option_1", "option_2"); 
$my_options = array(); 
$all_options = wp_load_alloptions(); 
foreach($all_options as $name => $value) { 
    if (in_array($name, $required_options)) { 
     $my_options[$name] = $value; 
    } 
} 

我在Ajax請求使用數組$my_options得到一些我所需要的選項,在我的問題提到。我也使用WordPress的設置API。

我使用WordPress Setting API頁面上描述的過程創建了10個選項的選項表,這意味着我需要對get_option函數(每次向數據庫發出請求)發出10+個請求。爲了減少請求數量,我將前面提到的代碼片段與add_settings_field函數一起使用。

實施例:

add_settings_field('myprefix_setting-id', 'This is the setting title', 'myprefix_setting_callback_function', 'general', 'myprefix_settings-section-name', $my_options)); 

跑過可變$my_options爲被傳遞到$callback功能使內$my_options提供給$callback函數內的代碼(的信息的額外的參數一般用來渲染HTML表單元素)。

然後你需要做的唯一的事情就是在你的$callback函數中添加額外的參數並相應地使用它。例如: -

function myprefix_setting_callback_function($args) { 
    echo $args['context']; 
} 

明顯,你可以重複上述的過程和屬性添加到每個add_settings_field函數調用,並降低你的數據庫負載。