在自定义项目中设置了一组幻灯片的数据,本来准备直接在输入完成后对数据进行重组,利用换行符号分割数据,利用“||”符号区分连接与图片地址,在保存设置项时将输入数据直接组装为html语句。实际测试过程中极其不方便,一有更改就需要重新输入源数据。
#||s1.jpg
#||s2.jpg
#||s3.jpg
#||s4.jpg
于是尝试保留原有用户输入,另行设置一个数组元素来存放组装好的html语句,这份工作拟在用户修改了幻灯数据后立即进行,以避免前台复杂的判断。原本的设想是在sanitize_callback中完成,但实际测试下来,update_option语句在该语境下不生效。同时因为需要结合是否开放懒加载等可能同时被修改的选项,于是考虑在设置项目被保存完毕后再做数据的组装工作。
customize_save_after
设置项被保存后会有一个customize_save_after的action被执行,所以只需要将需要执行的函数挂载其后就可以了。以下是在functions.php中实际添加的代码:
//设置项目后处理
function create_slides_html(){
$Options=get_option('august_options');
$slides_arr = explode("\n", $Options[slidesinfo]);
$slides_html ='';
if($Options[lazyswitch]){
foreach ($slides_arr as $item){
$itemurl = explode("||" , $item)[0];
$itemsrc = explode("||" , $item)[1];
$slides_html = $slides_html.'<a href="'.$itemurl.'"><img class="lazyload" data-original="'.get_template_directory_uri('').'/img/'.$itemsrc.'"></a>';
}
}else{
foreach ($slides_arr as $item){
$itemurl = explode("||" , $item)[0];
$itemsrc = explode("||" , $item)[1];
$slides_html = $slides_html.'<a href="'.$itemurl.'"><img src="'.get_template_directory_uri('').'/img/'.$itemsrc.'"></a>';
}
}
$slides_html = $slides_html.'<a class="slidesjs-previous slidesjs-navigation" href="#" title="Previous"><i class="icon-circle-left"></i></a>';
$slides_html = $slides_html.'<a class="slidesjs-next slidesjs-navigation" href="#" title="Next"><i class="icon-circle-right"></i></a>';
$Options[slideshtml] = $slides_html;
update_option('august_options',$Options);
}
add_action( 'customize_save_after', 'create_slides_html' );