使用自定义程序API的示例代码。
添加的设置(示例)如下:
$wp_customize->add_setting( \'theme_oenology_options[\' . $option_parameter[\'name\'] . \']\', array(
\'default\' => $option_parameter[\'default\'],
\'type\' => \'option\',
\'sanitize_callback\' => \'oenology_sanitize_\' . $option_parameter[\'sanitize\']
) );
添加控件(示例),如下所示:
$wp_customize->add_control(
\'oenology_\' . $option_parameter[\'name\'],
$customizer_control_parameters
);
注:
$customizer_control_parameters
是在别处定义的数组。对于选择类型控件(选择、收音机、收音机图像等),它包括
\'choices\'
钥匙
清理定义的回调(示例),如下所示:
function oenology_sanitize_select( $input ) {
return sanitize_key( $input );
}
在定制器中,一切都完美无瑕。显示控件,可配置设置,并且消毒工作正常。
问题到目前为止都很好,但最好将设置与$wp_customize->add_control()
. 让我们使用传递给的第二个参数\'sanitize_callback\'
, $setting
, 获取\'choices\'
在控件中定义!
Core reference:
return apply_filters( "customize_sanitize_{$this->id}", $value, $this );
解决方案尝试
function oenology_sanitize_select( $input, $setting ) {
$input = sanitize_key( $input );
$choices = array(); // See below
return ( array_key_exists( $input, $choices ) ? $input : $setting->default );
}
问题:使用以下两种方法之一不会返回传递给的选项数组
$wp_customize->add_control()
:
使用$wp_customize
全局对象:
global $wp_customize;
$control = $wp_customize->get_control( $setting->id );
$choices = $control->choices;
使用
$setting->manager
对象:
$choices = $setting->manager->get_control( $setting->id )->choices;
在这两种情况下,
get_control( $setting->id )
返回a
null
, 而不是对象。
问题
如何获取
\'choices\'
从…起
$wp_customize->get_control()
, 使用
$this
对象传递给
"customize_sanitize_{$this->id}"
?