contact form 7 で1人1回だけ応募できるフォームは、contact form DBのショートコードを使う

当ページのリンクには広告が含まれています。

contact form 7 を使って、応募フォームを作ろうとしたんだけど、ちょっと手こずった。問い合わせフォームのように、送信するボタンを応募するに変えれば良いだけかなと思ったんだが、それだと1人で何回も応募できてしまう。解決策として、応募のときに応募済みのメールアドレスと照合する必要がある。

contact form 7 は問い合わせした人を保存しておく機能はない。そこで、contact form DB を使う。というか、問い合わせを保存するのに、私はずーっと昔からcontact form DB を使っていた。このプラグインを応用できないかと思った。

調べてみると意外に情報が少ない。「”contact form 7″ 応募」「wp 応募 限定」としても、情報が出てこない。たぶん、contact form DB は良いプラグインだし、データベース機能があるので、保存したデータを取り出せるはずと信じ、応募とかを無視してcontact form DB を掘り下げて調べた。

やはり、contact form DB はデータを取り出せるショートコードをたくさん用意している。
https://cfdbplugin.com/?page_id=89

主に下記のショートコードがある。

  • [cfdb-datatable]
  • [cfdb-table]
  • [cfdb-json]
  • [cfdb-value]
  • [cfdb-count]
  • [cfdb-html]

今回は、中のメールアドレス、値を使いたいので cfdb-value だろうなーと思いつつ調べてみたら、やはり合っていた。
https://cfdbplugin.com/?page_id=98

応募済のメールアドレスを取得するコードは下記。今回、応募できるのは会員のみのため、wp_get_current_userでメールアドレスを取得している。


	$user_email = '';
	$user = wp_get_current_user();
	if( isset( $user ) ){
		$user_email = $user->user_email;
	}
	
	$shortcode = '[cfdb-value form="[コンタクトフォームのタイトル]" show="user_email" search="' . $user_email . '"]';
	
	$cfdb_list = do_shortcode( $shortcode );

	if( empty( $cfdb_list ) ){
		$content = do_shortcode( $content);
	}else{
		$content = $atts['sumi_message'];
	}

$cfdb_list が空だとメールアドレスは無いので、応募できる。空では無い場合は応募済みなので、メッセージを表示させておく。

注意点は、[コンタクトフォームのタイトル]は、contact form 7 のショートコードの id ではなく、titleを入れる。

この記事を書いた人

旦那デスノートで実際に使っている、WordpressやPHPのコードなどを公開しています。公開しているものは、ネットには あまり載っていない、痒いところに手が届くような拡張です。
@koichiromakita2

コメント

コメントする