web-dev-qa-db-ja.com

設定API - 入力は常に検証時に更新されます

私はWordpressの本をフォローしていて、プラグインを作成しようとしていて、オプションページを表示しています。

このページには2つのテキストフィールドがあります(その値は1つの配列に格納されています)。カスタム検証を追加しようとしています(空の場合など)。検証は、register_setting関数の3番目の引数に設定されています。

ただし、この本には、入力のサニタイズにWordpressの関数を使用しただけで可能な検証の例はありません。

私がこのリンクをたどったことを示すエラーメッセージを得るために: https://codex.wordpress.org/Function_Reference/add_settings_error

それで、検証機能で私はこのようなものを作りました:

if( $input['field_1'] == '' ) {

    $type = 'error';
    $message = __( 'Error message for field 1.' );

    add_settings_error(
        'uniq1',
        esc_attr( 'settings_updated' ),
        $message,
        $type
    ); 

} else {
    $input['field_1'] = sanitize_text_field( $input['field_1'];
}

if( $input['field_2'] == '' ) {

    $type = 'error';
    $message = __( 'Error message for field 2.' );

    add_settings_error(
        'uniq2',
        esc_attr( 'settings_updated' ),
        $message,
        $type
    ); 

} else {
     $input['field_2'] = sanitize_text_field( $input['field_2']
}

return $input;

私が行き詰まっているのは、エラー状態になった場合にその値を更新しない方法です。たとえば、空の値で現在持っているものは正しいエラーメッセージを表示しますが、それでも値を空に更新します。

それがエラー条件を満たすならば私が値を古いものに設定することができるようにその関数に古い値を渡す方法はありますか?

if( $input['field_1'] != '' ) {

    $type = 'error';
    $message = __( 'Error message for field 1.' );

    add_settings_error(
        'uniq1',
        esc_attr( 'settings_updated' ),
        $message,
        $type
    ); 

    $input['field_1'] = "OLD VALUE";

} else {
    $input['field_1'] = sanitize_text_field( $input['field_1'];
}

または、誰かが私を正しい方向に向けることができれば、私が間違った方法でこれに近づいているならば、それは大いに感謝されます。

1
thairish

わかりましたそれを把握しました。検証を行う関数では、get_option関数からデータベースに保存された元の値を取得できました。

//The option name which is set in the second argument in the register_setting function
get_option( 'option_name' ); 

その後、エラー条件が満たされた場合、入力値を古い値に設定できます。

$old_options = get_option( 'option_name' );

if( condition ) {

    //$input being the argument name for the validation function
    $input['option_name'] = $old_options['option_name'];

}
0
thairish

検証引数が負のようです。

if ($foo != "") { //means if foo not equal to empty space
  // do something when not empty
  // here you are setting an error
} else {
  // do something when empty
  // here you are trying to do your normal operation
}

データがあるときにエラーを設定し、データがないときにデータを処理しようとしています。

!===に変更してみてください

またはifの中で物事を処理する順番を変更する

1
stoi2m1