Contact Form 7 Serial Numbersの連番取得
-
Contact Form 7 Serial Numbersのプラグインを利用し、メールに連番を付けております。
現在、メール送信時の連番をユーザプロフィールの特定の項目に保存したいと考えておりますが、
連番をデータとして取得する方法が判りません。
Contact Form 7のメール送信時にプロフィール情報を更新する方法については、メール送信時に
同時にユーザ登録する手順の情報を見つけたので、それを応用してプロフィール情報を更新させる
こと自体は出来ましたが、そこに連番の情報を繋げたいと考えておりますが、いまいち判らない
状況です。
アドバイス等頂けると非常に助かります。
よろしくお願い致します。
-
こんにちは
このプラグインでは、
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/186922munyaguさん、ishitakaさん、はじめまして。
コメントいただき、有難う御座います。
返事遅くなり、大変申し訳御座いません。お二方のコメントを参考に、色々と試してみたいと思います。
進展致しましたら、改めてコメントさせていただきます。それから、ishitakaさんからご指摘頂いたマルチポストについては、
teratailの方を閉じさせていただきました。以後、マルチポストしないように致します。
特定のフォームのみプロフィール情報の更新を行うように組んでみましたが、
更新が上手く出来ません。以下が記述したコードですが、何処に間違いがあるのか判らない状況です。
※記述したコード
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.BFishitakaさん、こんにちは。
コメント有難う御座います。
フォーム自体の動きに関しては、メールも正常に送信されており、メールに追加した
連番も送信毎にカウントアップされている事も確認し、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' ) {
munyagu さん、こんにちは。
コメント有難う御座います。update_user_meta はメタデータが無い場合、追加される仕様なのですね。
貴重なコメント、有難う御座います。
とりあえずエラー分岐させずに update_user_meta のみにして試してみます。ishitakaさん、こんにちは。
コメント有難う御座います。私も同じ情報を参考にフォームIDを特定して更新させるように組みましたが、
現状、上手く更新出来ていない状況です。
フォームID自体は間違っておりませんが、IDをシングルクォートで囲むのか
良く判らなかったので、とりあえず囲んでみましたが、囲まないで指定した場合
についても試してみたいと思います。こちらで勘違いしていたところがあり、ユーザ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’ );
とりあえず原因切り分けの為、
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でのデバッグ※ 全角と半角に注意してください。
- トピック「Contact Form 7 Serial Numbersの連番取得」には新たに返信することはできません。