使用add_option添加了一部分自定义设置,采用了数组的形式。希望其中部分设置能在保存或者修改文章之后自动获取新数据并更新,所以准备在“save_post”(编辑或发布后)执行一个更新数据的操作。Wordpress的函数命名很规范,一般添加数据就是以add为前缀,修改更新则用update,而删除则是delete。所以显而易见的,这里就轮到“update_option()”函数登场了。
添加的数据
add_option( 'august_options' , array(
'sitename' => get_bloginfo('name'),
'jquery' => 'https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js',
'lazyload' => 'https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery.lazyload/1.9.1/jquery.lazyload.min.js',
));
update_option的简单实例
官网上找到的实例如下,但这个实例仅针对单一的变量,并不适合数组数据的更新:
<?php
$option_name = 'my_custom_color_option' ;
$new_value = 'red';
if ( get_option( $option_name ) !== false ) {
// The option already exists, so update it.
update_option( $option_name, $new_value );
} else {
// The option hasn't been created yet, so add it with $autoload set to 'no'.
$deprecated = null;
$autoload = 'no';
add_option( $option_name, $new_value, $deprecated, $autoload );
}
?>
跟数组相关的实例倒是也有一个,但是同自己的需求似乎不太相符:
//store in one variable
$multidimensional_options = array(
'inner_array'=>array(
'foo' => 'bar',
'hello' => 'world',
),
);
//Update entire array
update_option('my_multi_options', $multidimensional_options);
//Get entire array
$my_multi_options = get_option('my_multi_options');
整体更新的方法
尝试了类似“数组[键值]”的方式提交数据,除了因为少打个冒号弄崩系统外没有什么效果。最后采取了整体取回数据,本地更新数组,最后整体上传的方式,下面是程序的代码:
function aug_get_hot_tags(){
if( get_option( 'august_options' )) {
$old_option=get_option( 'august_options');
$hottags=wp_tag_cloud('format=array&category&number=20');
$pattern1='/class=\'.*?\'/';
$pattern2='/style=\'.*?\'/';
$old_option[hottag]=array();
if(is_array($hottags)){
foreach($hottags as $tag){
$tag=preg_replace($pattern1,'',$tag);
$tag=preg_replace($pattern2,'',$tag);
array_push($old_option[hottag],$tag);
}
update_option('august_options', $old_option);
}
}
}
add_action( 'save_post', 'aug_get_hot_tags' );
这里是尝试获取20个热门的标签,直接存在自定义项目里,请忽略正则表达式的乡土写法,博主现学的。每次有文章发布或更新时更新一次数据,实际上随着设置项目的变多,整体的更新数据可能会较慢,可能考虑单独列出一个设置项用于存放数据会更为合理一些。