wordpress的定制器对象(Customize API)提供了一组现成的组件供用户使用,我们可以利用定制器对象来方便快捷的生成一些后台设置项,这些后台项目会被添加到“主题-自定义”菜单的面板上,利用定制器对象生成的控件,其展示风格与官方后台选项的风格一致,更利于wordpress用户的理解与使用。要添加、删除或修改任何定制器对象,以及访问定制器管理器,需要使用customize_register钩子:
customize_register钩子
function august_customize_register( $wp_customize ) {
// Do stuff with $wp_customize, the WP_Customize_Manager object.
}
add_action( 'customize_register', 'august_customize_register' );
节点-定义自己的选项
add_section会在自定义面板上增加一个选项,博主服务器配置比较低,所以很多js库都是使用的静态资源公共库,这里就以静态资源的引用为例,添加了节点之后并不着急去测试,在没有为节点添加控件之前,节点是不会出现在自定义面板上的;
function august_customize_register( $wp_customize ) {
$wp_customize -> add_section( 'august_global', array(
'title' => '静态资源' ,
'priority' => 160,
));
}
add_action( 'customize_register', 'august_customize_register' );
设置项-定义自己的数据
add_setting设置了一个“august_language”的设置项,它的数据会被保存在wp的“options.php”中,因为没有添加控件的关系,所以目前仍然无法测试,之所以需要先定义数据,因为我们在生成控件的时候,需要同时绑定该控件对应的设置项;
function august_customize_register( $wp_customize ) {
$wp_customize -> add_section( 'august_global', array(
'title' => '静态资源' ,
'priority' => 160,
));
$wp_customize->add_setting('august_jquery',array(
'default' => '',
'transport' => 'postMessage',
'type' => 'option',
));
}
add_action( 'customize_register', 'august_customize_register' );
控件-常规的表单都支持
前面生成了一个“august_jquery”的设置项,现在我们来为这个设置项绑定控件。除了绑定设置项外,add_control还需要指定所属的节点,也可以控件所从属的自定义面板上的菜单项,控件支持很多类型,比如单选框,多选框,多行文本等等,这里简单的将其制定为输入框input;
function august_customize_register( $wp_customize ) {
$wp_customize -> add_section( 'august_global', array(
'title' => '静态资源' ,
'priority' => 160,
));
$wp_customize->add_setting('august_jquery',array(
'default' => '',
'transport' => 'postMessage',
'type' => 'option',
));
$wp_customize->add_control( 'august_jquery', array(
'label' => '主题jquery' ,
'type' => 'input',
'section' => 'august_global',
));
}
add_action( 'customize_register', 'august_customize_register' );
节点就是一个子菜单
控件与设置项是一一对应的,一个控件绑定一个设置项,节点则可以理解成一个子菜单,它允许包含多个控件与设置项,比如下面这个实例中,我们增加了一个选项“august_headroom”:
function august_customize_register( $wp_customize ) {
$wp_customize -> add_section( 'august_global', array(
'title' => '静态资源' ,
'priority' => 160,
));
$wp_customize->add_setting('august_jquery',array(
'default' => '',
'transport' => 'postMessage',
'type' => 'option',
));
$wp_customize->add_control( 'august_jquery', array(
'label' => '主题jquery' ,
'type' => 'input',
'section' => 'august_global',
));
$wp_customize->add_setting('august_headroom',array(
'default' => '',
'transport' => 'postMessage',
'type' => 'option',
));
$wp_customize->add_control( 'august_headroom', array(
'label' => '主题headroom' ,
'type' => 'input',
'section' => 'august_global',
));
}
add_action( 'customize_register', 'august_customize_register' );
数据的调用
前文为每个设置生成了一个options项目,调用的时候需要挨个调用,当设置项比较多的时候,一个页面可能需要多次提取options.php的内容,这是比较耗费服务器资源的;
<?php $option_jquery=get_option('august_jquery');?>
<?php echo $option_jquery;?>
<?php $option_jquery=get_option('august_headroom');?>
<?php echo $option_headroom;?>
设置项数组化
function august_customize_register( $wp_customize ) {
$wp_customize -> add_section( 'august_global', array(
'title' => '静态资源' ,
'priority' => 160,
));
$wp_customize->add_setting('august_options[jquery]',array(
'default' => '',
'transport' => 'postMessage',
'type' => 'option',
));
$wp_customize->add_control( 'august_options[jquery]', array(
'label' => '主题jquery' ,
'type' => 'input',
'section' => 'august_global',
));
$wp_customize->add_setting('august_options[headroom]',array(
'default' => '',
'transport' => 'postMessage',
'type' => 'option',
));
$wp_customize->add_control( 'august_options[headroom]', array(
'label' => '主题headroom' ,
'type' => 'input',
'section' => 'august_global',
));
}
add_action( 'customize_register', 'august_customize_register' );
提取数组后根据键值调用数据:
<?php $option=get_option('august_options');?>
<?php echo $option['jquery'];?>
<?php echo $option['headroom'];?>