web-dev-qa-db-ja.com

レジスタ設定配列を検証する方法

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' );
2
roastedtoast

それはあなたがユーザー入力を調べてそれを検証することができる唯一のポイントであるように思われるので個人的に私はそれを同じようにします。

また、 この優れた記事のコードサンプルから深く借りることができます

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呼び出しです。これがベストプラクティスです。

1
montrealist