一系列的UPDATE_OPTION调用安全、性能明智吗?

时间:2016-10-09 作者:user2128576

我编写了一个函数,可以设置大量的WordPress选项。

例如:

update_option(\'option1\', \'0\');
update_option(\'option2\', \'0\');
update_option(\'option3\', \'0\');
update_option(\'option4\', \'1\');
update_option(\'option5\', \'1\');
update_option(\'option6\', \'0\');
update_option(\'option7\', \'1\');
我知道这个函数的作用是更改数据库中的值。我知道当使用get_option, 发生了一种形式的缓存,因此可以认为是安全的。然而,对于update_option, 我不是很确定。

我找不到这样的函数update_option 它接受多个要更新的选项。这样做对性能有好处吗?还有其他更安全的方法吗?

1 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

为一组相关选项使用单独的选项名称并不理想。

相反,除非有特殊原因,否则应将选项作为序列化数组存储在单个键中。这样,您只需拨打一个add_option(), update_option(), 和get_option() 这将意味着总体上生成的查询更少,尤其是在添加和更新值时(如您所述)。

// Example function where options are saved under the name wpse242105_options
function wpse242105_options() {
    // Example settings array
    $settings = array (
        \'option1\' => \'0\',
        \'option2\' => \'0\',
        \'option3\' => \'0\',
        \'option4\' => \'1\',
        \'option5\' => \'1\',
        \'option6\' => \'0\',
        \'option7\' => \'1\',   
    );

    // Save all of the options under a single option key, wpse242105_options
    add_option( \'wpse242105_options\', $settings ); // Using add_option() so option will be created if it doesn\'t exist.
}
add_action( \'init\', \'wpse242105_options\' );
保存选项后,您可以在一次调用中获取所有选项get_option().

 $saved_options = get_option( \'wpse242105_options\' );
 print_r( $saved_options );

Output:

Array
(
    [option1] => 0
    [option2] => 0
    [option3] => 0
    [option4] => 1
    [option5] => 1
    [option6] => 0
    [option7] => 1
)
请注意,WordPress将为您处理数组的序列化。这个option_value 对于wpse242105_options 在数据库中如下所示:

a:7:{s:7:"option1";s:1:"1";s:7:"option2";s:1:"0";s:7:"option3";s:1:"0";s:7:"option4";s:1:"1";s:7:"option5";s:1:"1";s:7:"option6";s:1:"0";s:7:"option7";s:1:"1";}
get_option() 将序列化数组转换回PHP数组。