register_setting()
コールバック関数を使って適切な検証を行う方法を知りたいのですが。
これが私が働きたい私のコードのサンプル部分です。
register_setting( 'wpPart_options', 'wpPart_options', array( &$this, 'wpPartValidate_settings' ) );
$this
はオブジェクトの配列です。
そしてこれが私のwpPartValidate_settings();
関数の内容です。
public function wpPartValidate_settings( $input ) {
$options = get_option( 'wpPart_options' );
if ( check_admin_referer( 'wpPart_nonce_field', 'wpPart_nonce_verify_adm' ) ) {
return $input;
}
}
$input
は配列なので、検証関数に来るすべての入力に対してどのようにして適切な検証を行うことができますか?
たとえば、テキストフィールドでstrlen()
チェックを実行したいと思います。
if ( strlen( $input ) != 20 )
add_settings_error( 'wpPart_options', 'textField', __( 'TextField incomplete.', 'wpPart' ) , 'error' );
それはあなたがユーザー入力を調べてそれを検証することができる唯一のポイントであるように思われるので個人的に私はそれを同じようにします。
また、 この優れた記事のコードサンプルから深く借りることができます :
function wpPartValidate_settings( $input ) {
if ( check_admin_referer( 'wpPart_nonce_field', 'wpPart_nonce_verify_adm' ) ) {
// Create our array for storing the validated options
$output = array();
foreach( $input as $key => $value ) {
// Check to see if the current option has a value. If so, process it.
if( isset( $input[$key] ) ) {
// Strip all HTML and PHP tags and properly handle quoted strings
$output[$key] = strip_tags( stripslashes( $input[ $key ] ) );
} // end if
} // end foreach
} // end if
// Return the array processing any additional functions filtered by this action
return apply_filters( 'wpPartValidate_settings', $output, $input );
}
私のお気に入りの部分は最後のapply_filters
呼び出しです。これがベストプラクティスです。