我想在主题定制器中动态添加/删除控件,而无需完全重新加载定制器页面。例如,当我从下拉列表中选择选项1时,我希望控件a显示,控件B隐藏,反之亦然。
我可以想出三种方法:
1、找到一种完全重新加载自定义程序的方法(通过提交按钮或javascript),然后我可以这样做:
$option1 = get_theme_mod(\'option1\');
if( $option1 === \'1\' ){
$wp_customize->add_setting(\'controlA\', array());
$wp_customize->add_control( \'controlA\', array(
\'section\' => \'layout_section\',
\'type\' => \'text\', // text (default), checkbox, radio, select, dropdown-pages ) );
}
2。使用Ajax加载更新的值,并使用javascript填充定制器控件。
因此,我将自己的脚本按如下方式排队:
function custom_customize_enqueue() {
wp_enqueue_script( \'custom-customize\', get_template_directory_uri() . \'/custom.customize.js\', array( \'jquery\', \'customize-controls\' ), false, true );
}
add_action( \'customize_controls_enqueue_scripts\', \'custom_customize_enqueue\' );
而且是定制的。定制js我会调用一个函数来获取我的控制值:
$.ajax({
url: ajaxurl,
type: \'POST\',
data: {
\'action\':\'get_control_values\'
},
success:function(data) {
//populate customize controls with the updated values
}
});
在函数中。php:
function get_control_values(){
$option1 = get_theme_mod(\'option1\');
if( $option1 === \'1\' ){
// echo json_encoded data to populate my conditional customize controls
}
}
add_action( \'wp_ajax_get_control_values\', \'get_control_values\' );
add_action( \'wp_ajax_nopriv_get_control_values\', \'get_control_values\' );
3。创建一个自定义控件,该控件包含有条件地相互依赖的所有输入作为“伪”输入,并将其值作为JSON存储在另一个隐藏输入中。因此,当我从下拉列表中选择option1时,控件B将被javascript隐藏,JSON字符串将被更新,等等。
编辑:4。选项:这也可以通过WordPress主题定制器Javascript界面实现,如下所述:http://shibashake.com/wordpress-theme/wordpress-theme-customizer-javascript-interface
有人能给我指出正确的方向吗?谢谢