サポート » プラグイン » MW WP Formのチェックボックスの内容で条件分岐したい

  • 解決済 imap

    (@ixt220)


    MW WP Formのチェックボックスの値で、管理者宛のメールの送信先を変更したいと考えております。
    以下の環境とコードで試しているのですが、うまく条件分岐できません。

    ——————————–
    Wordpress:4.4.2
    MW WP Form:2.7.0

    function my_admin_mail( $Mail, $values, $Data ) {
        $ary = $Data->get( 'field_name' );
        if( !empty($ary) ){
          $my_Mail = clone $Mail;
          foreach( $ary as $value ){
            if( $value == 'AAA' ){
              $my_Mail->to = 'aaa@hoge';
              $my_Mail->send();
            }
            if( $value == 'BBB' ){
              $my_Mail->to = 'bbb@hoge';
              $my_Mail->send();
            }
            if( $value == 'CCC' ){
              $my_Mail->to = 'ccc@hoge';
              $my_Mail->send();
            }
          }
    
        }
        return $Mail;
    }
    add_filter( 'mwform_admin_mail_mw-wp-form-XXX', 'my_admin_mail', 10, 3 );

    ——————————–

    配列$aryを、「$my_Mail->body .= $ary」とするとチェックボックスの内容はちゃんと入っています。
    print_rやis_arrayなど試すと「0」や「1」の値が取得できるのですが、
    何の値なのか理解できていません。

    チェックボックスはどのような方法で個別の値を取得できるのでしょうか?
    またチェックボックスは、そもそも配列で送信されているのでしょうか?

    理解不足・知識不足で大変恐縮ですが、何卒宜しくお願い致します。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック投稿者 imap

    (@ixt220)

    MW WP Formの過去のフォーラムを確認し、つぎはぎしながら試していますが、
    メールは届くのですが、チェックボックスの中身を正しく判別できません。

    function my_admin_mail( $Mail, $values, $Data ) {
    
      if ( !is_null( $Data->get('field_name') )) {
        $my_Mail = clone $Mail;
        $my_Mail->subject = '確認テストメール';
        $my_Mail->to = 'aaa@hoge';
    
        if ( in_array( 'AAA', $Data->get('field_name') )) {
          $mail_body = 'AAAが入っている';
        } else {
          $mail_body = 'AAAが入っていない!!';
        }
    
        $my_Mail->body .= $mail_body;
        $my_Mail->send();
      }
      return $Mail;
    }
    add_filter( 'mwform_admin_mail_mw-wp-form-XXX', 'my_admin_mail', 10, 3 );

    チェックボックス(field_name)は
    ・AAA
    ・BBB
    ・CCC
    があり、テストではAAAとBBBにチェックを入れて送信しています。

    届くメールには、「AAAが入っていない!!」のメッセージがあり、in_arrayの部分で中身を判別できていなそうなのですが、ここでつまづいております。

    これを
    if ( in_array( ‘AAA’, $Data->get(‘field_name’) ))
    ↓↓↓
    if ( in_array( ‘AAA’, $values[‘field_name’][‘data’] ))
    にしてみましたが、うまくいきませんでした。

    どなたかご教示頂けると幸いです。
    宜しくお願い致します。

    function my_admin_mail( $Mail, $values, $Data ) {
        var_dump( $Data->get('field_name') ); exit;

    のようにコードを書き変えて送信すると、どのような値が送信されているか確認できると思います。チェックを入れて送信し、表示された値を書き込んでいただけますか?

    トピック投稿者 imap

    (@ixt220)

    Takashi Kitajima様

    返信ありがとうございます。

    上記のコードを入力したところ、下記のように表示されました。

    string(半角数字) "AAA,BBB"

    チェックした値はちゃんと表示されております。

    トピック投稿者 imap

    (@ixt220)

    Takashi Kitajima様

    お世話になっております。
    $Data->get(‘field_name’)で返される値は文字列ということでしょうか?

    配列$aryに入れて、in_arrayで判別し、
    下記のようなコードにしたらうまくいきました。

    $ary = explode(",", $Data->get('field_name') );
    if ( in_array( 'AAA', $ary )) {
      $mail_body = 'AAAが入っている';
    } else {
       $mail_body = 'AAAが入っていない!!';
    }

    うまく値を判別し条件分岐できたのですが、これで大丈夫でしょうか?

    そもそもPHPの中身やプラグインの構造など根本的な部分を理解せず、
    つぎはぎしながら今回たまたまうまく条件分岐できましたが、
    お問い合わせフォームという重要なページですので、これで大丈夫かまだ不安です。

    エンジニアの皆様も分からない部分にぶつかった時、どのように解決されているのでしょうか?

    表題と関係ない質問になってしまい申し訳ありません。

    それで問題ないと思います!
    MW WP Form の Data オブジェクトには get()、get_raw()、get_post_value_by_key() というメソッドがあり、それぞれ取得できるデータの形が微妙に違います。get() は実際にメールに挿入される形のデータを返すので文字列になります。

    エンジニアの皆様も分からない部分にぶつかった時、どのように解決されているのでしょうか?

    僕の場合、ググってもわからないときはコードを読みますね。例えば、今回なら
    https://github.com/inc2734/mw-wp-form/blob/master/classes/models/class.data.php
    をもとにコードを辿って行くと、なんとなくどういったデータが返されるのかがわかると思います。
    それでも無理なときはあきらめます^^;

    トピック投稿者 imap

    (@ixt220)

    Takashi Kitajima様

    お世話になっております。
    ご回答ありがとうございます。

    返信が遅くなって申し訳ありません。
    親切な対応およびご回答いただき誠にありがとうございます。

    コピペではなく、コードを辿って見る癖をつけたいと思います。

    今後とも宜しくお願い致します。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「MW WP Formのチェックボックスの内容で条件分岐したい」には新たに返信することはできません。