如果希望清理回调仅应用于特定的设置字段(即使用register_setting()), 然后,您希望对每个设置字段使用不同的回调。例如。
// Sample field HTML:
//<input name="field-1" value="<?php esc_attr( get_option( \'field-1\' ) ); ?>">
function my_settings_field_1_validation( $value ) {
if ( empty( $value ) ) {
$value = get_option( \'field-1\' ); // ignore the user\'s changes and use the old database value
add_settings_error( \'my_option_notice\', \'invalid_field_1\', \'Field 1 is required.\' );
}
return $value;
}
function my_settings_field_2_validation( $value ) {
if ( empty( $value ) ) {
$value = get_option( \'field-2\' ); // ignore the user\'s changes and use the old database value
add_settings_error( \'my_option_notice\', \'invalid_field_2\', \'Field 2 is required.\' );
}
return $value;
}
// Then in your my_settings_init():
register_setting( \'my-settings\', \'field-1\', \'my_settings_field_1_validation\' );
register_setting( \'my-settings\', \'field-2\', \'my_settings_field_2_validation\' );
或者可以使用闭包
register_setting():
function my_settings_field_validation( $value, $field, $name ) {
if ( empty( $value ) ) {
$value = get_option( $field ); // ignore the user\'s changes and use the old database value
add_settings_error( \'my_option_notice\', "invalid_$field", "$name is required." );
}
return $value;
}
// Then in your my_settings_init():
register_setting( \'my-settings\', \'field-1\', function ( $value ) {
return my_settings_field_validation( $value, \'field-1\', \'Field 1\' );
} );
register_setting( \'my-settings\', \'field-2\', function ( $value ) {
return my_settings_field_validation( $value, \'field-2\', \'Field 2\' );
} );
你为什么打电话
add_option() 和
update_option() 在您的回拨中(
my_settings_settings_validation())? 我是说,
register_setting() 用于注册一个选项,该选项将在通过设置窗体更改值时自动添加/更新,因此您不需要手动更新值。
如果您真的想让这些设置成为名为my-settings, 然后将选项保存为数组,然后调用register_setting() 只需使用一次my-settings[<field>] 在您的输入中name 属性例如。
// Sample field HTML:
//<input name="my-settings[field-1]" value="<?php echo esc_attr( $options[\'field-1\'] ); ?>">
// whereby $options is:
//$options = (array) get_option( \'my-settings\' );
function my_settings_field_validation( $value ) {
$value = (array) $value;
$valid = true;
if ( empty( $value[\'field-1\'] ) ) {
$valid = false;
add_settings_error( \'my_option_notice\', \'invalid_field-1\', \'Field 1 is required.\' );
}
if ( empty( $value[\'field-2\'] ) ) {
$valid = false;
add_settings_error( \'my_option_notice\', \'invalid_field-2\', \'Field 2 is required.\' );
}
// Ignore the user\'s changes and use the old database value.
if ( ! $valid ) {
$value = get_option( \'my-settings\' );
}
return $value;
}
// Then in your my_settings_init():
register_setting( \'my-settings\', \'my-settings\', \'my_settings_field_validation\' );
顺便说一句,你可以简单地添加
required 但最好在客户端(浏览器)和服务器端都进行验证。
此外,如果我是你,我可能会使用复数形式;“通知”;如中所示my_option_notices.. 但这只是我自己的喜好。=)