サポート » プラグイン » Contact Form 7 Serial Numbersの連番取得

  • 解決済 pampamsan

    (@pampamsan)


    Contact Form 7 Serial Numbersのプラグインを利用し、メールに連番を付けております。
    現在、メール送信時の連番をユーザプロフィールの特定の項目に保存したいと考えておりますが、
    連番をデータとして取得する方法が判りません。
    Contact Form 7のメール送信時にプロフィール情報を更新する方法については、メール送信時に
    同時にユーザ登録する手順の情報を見つけたので、それを応用してプロフィール情報を更新させる
    こと自体は出来ましたが、そこに連番の情報を繋げたいと考えておりますが、いまいち判らない
    状況です。
    アドバイス等頂けると非常に助かります。
    よろしくお願い致します。

15件の返信を表示中 - 1 - 15件目 (全23件中)
  • こんにちは

    このプラグインでは、wpcf7_before_send_mailという Contact Form 7 のアクションフックを使って、連番を更新しています。
    更新された連番は、nklab_wpcf7sn_count_フォームIDというオプションに保存されます。

    ですので、wpcf7_before_send_mailというアクションフックが実行される以降のフック(例えば wpcf7_mail_sent など)でオプション値を取得すればプロフィール情報で使えると思います。

    add_action( 'wpcf7_mail_sent', 'my_save_profile' );
    function my_save_profile( $contact_form ){
      $id = intval( $contactform->id() );
      $count = get_option( 'nklab_wpcf7sn_count_' . $id );
    
      // プロフィールの更新
    
    }

    という感じで出来ると思います。
    このコードは一度も動かしていないので、参考程度にお願いします。

    こんにちは

    投稿データにもシリアルナンバー(「Serial Number」)が格納されているので、それを利用するのもいいかもしれません。

    function my_save_profile( $contact_form ) {
    	$submission = WPCF7_Submission::get_instance();
    	if ( $submission ) {
    		$formdata = $submission->get_posted_data();
    
    		$serial_number = $formdata['Serial Number'];
    
    		// プロフィールの更新
    
    	}
    }
    add_action( 'wpcf7_mail_sent', 'my_save_profile' );

    厳密なシリアルナンバーを取得したいのであれば、ishitaka さんのやり方が良さそうですね。

    たしか、WordPress の option 値にはキャッシュの仕組みがあったように思いますし、シリアルナンバーの更新から取得までの間に誰かが更新したら、自分のシリアルナンバーが取れないリスクもある気がします。
    リロードしたら表示が直る、程度のことなら良いと思いますが、シリアルナンバーでは option から取ると問題があるかもしれませんね。

    マルチポストですね。どちらかを閉じてください。
    https://teratail.com/questions/186922

    マルチポストとは

    トピック投稿者 pampamsan

    (@pampamsan)

    munyaguさん、ishitakaさん、はじめまして。

    コメントいただき、有難う御座います。
    返事遅くなり、大変申し訳御座いません。

    お二方のコメントを参考に、色々と試してみたいと思います。
    進展致しましたら、改めてコメントさせていただきます。

    それから、ishitakaさんからご指摘頂いたマルチポストについては、
    teratailの方を閉じさせていただきました。

    以後、マルチポストしないように致します。

    トピック投稿者 pampamsan

    (@pampamsan)

    特定のフォームのみプロフィール情報の更新を行うように組んでみましたが、
    更新が上手く出来ません。

    以下が記述したコードですが、何処に間違いがあるのか判らない状況です。

    ※記述したコード
    function my_save_prof( $contact_form ) {
    //フォームID取得
    $id = $contact_form->id();
    //特定のフォームのみ更新させる
    if($id == ‘1106’) {
    //送信情報取得
    $submission = WPCF7_Submission::get_instance();
    if ( $submission ) {
    //プロフィール更新
    $formdata = $submission->get_posted_data();
    update_user_meta($formdata[‘text-183’], ‘Serial_No’, $formdata[‘Serial Number’]);
    //更新エラー判定(メタキー存在しない場合)
    if ($formdata[‘Serial Number’] != get_user_meta($formdata[‘text-183’], ‘Serial_No’, true)) {
    add_user_meta($formdata[‘text-183’], ‘Serial_No’, $formdata[‘Serial Number’]);
    }
    }
    }
    }
    add_action( ‘wpcf7_mail_sent’, ‘my_save_prof’ );

    引き続きアドバイス等を頂けると助かります。

    よろしくお願い致します。

     

    ざっとコードを見た感じでは更新はできると思います。
    別の場所に問題があるのではないでしょうか?

    ※ このフォーラムでコードを貼り付ける場合は、コードを選択し [code] ボタンをクリック(逆クォートで囲む)してください。
    詳細は、下記ページをご覧ください。
    https://wpdocs.osdn.jp/フォーラムへようこそ#.E3.82.B3.E3.83.BC.E3.83.89.E3.81.AE.E6.8A.95.E7.A8.BF

    トピック投稿者 pampamsan

    (@pampamsan)

    ishitakaさん、こんにちは。

    コメント有難う御座います。

    フォーム自体の動きに関しては、メールも正常に送信されており、メールに追加した
    連番も送信毎にカウントアップされている事も確認し、Contact Form DBとの連携で
    連番もDB上に保存されていたので、ここまでの動きは問題無いのですが。

    Wordpress、PHP自体、初めての経験なので、問題が何処なのか、どうやって問題個所を
    見つけるのか判らない状況になっております。

    add_user_metaじゃなくてupdate_user_metaですかね。

    ユーザーが指定したメタデータを持たなければ、追加されます。という仕様なので、レコードが無くても update_user_meta で良いです

    あ、ちょっとソースを読み違えていましたね・・・でも、メタデータの存在確認の分岐をやめてupdate_user_meta 一本にしたらどうでしょうか。

    Contact Form 7のメール送信時にプロフィール情報を更新する方法については、メール送信時に同時にユーザ登録する手順の情報を見つけたので、それを応用してプロフィール情報を更新させること自体は出来ましたが、・・・

    特定のフォームのみプロフィール情報の更新を行うように組んでみましたが、更新が上手く出来ません。

    特定のフォームのみにしない場合は更新できるようなので、下記のフォーム ID が間違えているくらいしか思いつきません。
    フォーム ID (投稿 ID ではなく Contact Form 7 のフォーム ID ですよ)は正しいですか?

    //特定のフォームのみ更新させる
    if ( $id == '1106' ) {
    トピック投稿者 pampamsan

    (@pampamsan)

    munyagu さん、こんにちは。
    コメント有難う御座います。

    update_user_meta はメタデータが無い場合、追加される仕様なのですね。
    貴重なコメント、有難う御座います。
    とりあえずエラー分岐させずに update_user_meta のみにして試してみます。

    ishitakaさん、こんにちは。
    コメント有難う御座います。

    私も同じ情報を参考にフォームIDを特定して更新させるように組みましたが、
    現状、上手く更新出来ていない状況です。
    フォームID自体は間違っておりませんが、IDをシングルクォートで囲むのか
    良く判らなかったので、とりあえず囲んでみましたが、囲まないで指定した場合
    についても試してみたいと思います。

    トピック投稿者 pampamsan

    (@pampamsan)

    こちらで勘違いしていたところがあり、ユーザIDにログインIDを
    指定していた為、とりあえずユーザIDを取得してから指定するよう
    見直しを行い、試してみましたが、うまく登録出来ませんでした。

    次にフォームIDをシングルクォートで囲まずに指定して試しましたが、
    こちらでも上手く登録出来ませんでした。

    とりあえずフォームIDを指定せずに試してみましたが、それでも
    上手く登録出来ませんでした。

    原因が中々特定出来ない状況です。。。

    ※自身のユーザIDを取得してから更新させるよう見直ししたコード

    function my_save_prof( $contact_form ) {
        //フォームID取得
        $id = $contact_form->id();
        //特定のフォームのみ更新させる
        if($id == ‘1106’) {
            //送信情報取得
            $submission = WPCF7_Submission::get_instance();
            if ( $submission ) {
                //自ユーザーID取得
                $user = wp_get_current_user();
                $my_userid = $user->ID;
                //プロフィール更新
                $formdata = $submission->get_posted_data();
                update_user_meta($my_userid, ‘Serial_No’, $formdata[‘Serial Number’]);
            }
        }
    }
    add_action( ‘wpcf7_mail_sent’, ‘my_save_prof’ );

    ※フォームIDの指定を外したコード

    function my_save_prof( $contact_form ) {
        //送信情報取得
        $submission = WPCF7_Submission::get_instance();
        if ( $submission ) {
            //自ユーザーID取得
            $user = wp_get_current_user();
            $my_userid = $user->ID;
            //プロフィール更新
            $formdata = $submission->get_posted_data();
            update_user_meta($my_userid, ‘Serial_No’, $formdata[‘Serial Number’]);
        }
    }
    add_action( ‘wpcf7_mail_sent’, ‘my_save_prof’ );
    トピック投稿者 pampamsan

    (@pampamsan)

    とりあえず原因切り分けの為、update_user_meta に指定している値を
    固定でセットしてみたところ、エラーが発生したようで、フォームにアクセス
    した時点で何も表示されない状態になりました。

    function my_save_prof( $contact_form ) {
        //送信情報取得
        $submission = WPCF7_Submission::get_instance();
        if ( $submission ) {
            //自ユーザーID取得
            $user = wp_get_current_user();
            $my_userid = $user->ID;
            //プロフィール更新
            $formdata = $submission->get_posted_data();
            update_user_meta(9, ‘Serial_No’, ’00001’);
        }
    }
    add_action( ‘wpcf7_mail_sent’, ‘my_save_prof’ );

    「9」はログインしている自身のユーザID、「Serial_No」は登録する
    メタキー、「00001」は登録する連番です。(ユーザIDに間違いは無い)

    エラーになったという事は、何かしら指定の仕方が間違っているのかと
    思うのですが、エラーの内容が判らない為、何が間違っているのかさえ
    判らない状況です。。。

    フォームにアクセスした時点で何も表示されない状態になりました。

    これは PHP エラーが発生しているためだと思われます。デバッグモードを有効にしてエラーメッセージを確認してみてください。
    http://wpdocs.osdn.jp/WordPressでのデバッグ

    ※ 全角と半角に注意してください。

15件の返信を表示中 - 1 - 15件目 (全23件中)
  • トピック「Contact Form 7 Serial Numbersの連番取得」には新たに返信することはできません。