inc2734 / mw-wp-form

69 stars 46 forks source link

フィールドの初期値フィルターについて #87

Closed naoshiro closed 5 years ago

naoshiro commented 5 years ago

「MW WP Form」について、3.2.3 -> 4.0.4へのアップデートを試みた際に気になった点になります。

本プラグインにて作成したフォーム内にラジオボタンのフィールドを設置しており、条件によって、初期値を変更するフックをしてます。

下記がそのコード例です。

add_filter('mwform_value_mw-wp-form-xxx', function($value, $name) {
   if($name === 'huge' && $_GET['hoge'] === hoge) {
      return 'huga';
   }
   return $value;
});

フィールドタイプがtextだと初期値を変更できたのですが、ラジオボタンだと変更できず。 コードを追ってみると、ラジオボタンでは条件をみたしていないようです。

if ( isset( $this->defaults['value'] ) && isset( $atts['name'] ) && ! isset( $atts['value'] ) ) {
  $atts['value'] = apply_filters(
    'mwform_value_' . $this->form_key,
    $this->defaults['value'],
    $atts['name']
  );
}
// ラジオボタンのときは$this->defaults['value']がnull

https://github.com/inc2734/mw-wp-form/blob/master/classes/abstract/class.form-field.php#L184

defaults['value']がnullなのが原因だとおもわれます。 3.2.3のときは変更できていたため4.0.4で仕様が変わったのか、それともバグなのか。

よろしくおねがいします。

inc2734 commented 5 years ago

お知らせありがとうございます! もともと

if ( array_key_exists( 'value', $this->defaults ) && isset( $atts['name'] ) && ! isset( $atts['value'] ) ) {

となっていたのが、現在

if ( isset( $this->defaults['value'] ) && isset( $atts['name'] ) && ! isset( $atts['value'] ) ) {

となっていたのでバグですかねー。ちょっと今となってはなんで変更したのか覚えていませんが…

naoshiro commented 5 years ago

@inc2734 ご確認ありがとうございます。以前のarray_key_exists( 'value', $this->defaults )で試してみたところ正常に変更できたこと確認できました。

issetに変更した経緯がわからない以上安易にはarray_key_existsに戻すのは怖いところですね。。 (ちなみに、チェックボックスも同様の問題もありそれも改善されました。)