質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

2回答

11992閲覧

Wordpressで人数制限つきフォームが利用できるプラグインはありますでしょうか?

EzrealTrueshot

総合スコア389

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2019/03/11 08:39

探しているもの

WordPressで人数付きで制限できるフォームを探しています。
Contact Form 7
というものがフォームプラグインであるのですが、やりたいことはこれです。

ただ、これだと無制限にフォーム利用できてしまうので、10人がフォームを利用(サブミット)したらそのフォームは使えないようにしたいです。

見つけたもの

https://blog.dreamhive.co.jp/kenta/archives/5680
こちらのページにかかれていたものがまさにやりたいことそのものでした。
ただ、こちらのページで紹介されているプラグインはもう使えない状態のようです。

もうダウンロードできない。
https://wordpress.org/plugins/contact-form-7-to-database-extension/

質問

フォームでPOSTされた回数で制限できるプラグインが2019年現在あるようでしたら、教えていただけませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Contact Form 7 作者が作成した Contact Form 7 のデータをデータベースに保存するプラグイン( Flamingo ) があるので、従来あったプラグインはほとんど更新されなくなりましたね。

Flamingo は、元々は Contact Form 7 (単体では送信されたメッセージを保存する機能を持ちません) のために作成されたメッセージ保存プラグインです。


WordPressプラグインで検索して数ページみた感じでは、規定回数のみ表示する機能を持ったフォームはなさそうです。

Contact Form 7 + Flamingo を組み合わせて使うのであれば、Flamingo の場合、フォーム設置 URL を基準にしてデータを保存しているいるので、フォームページのスラッグ( slug ) を利用して、データ件数をカウントすることはできそうです。

たとえば、

function my_contactfrom7_count_178841( $formid = '' ) { $args = array( 'post_type' => 'flamingo_inbound', 'posts_per_page' => -1, 'orderby' => 'date', 'order' => 'DESC', 'post_status' => 'publish' ); if( isset($formid) ) { $args['meta_query'] = array( array( 'key' => '_meta', 'value' => $formid, 'compare' => 'LIKE' ) ); } $forms = get_posts( $args ); if(isset($forms)) return count($forms); }

のような関数を作成して、my_contactfrom7_count_178841( フォームを設置したページのslug ) のような感じで関数を呼び出すと フォームを設置したページのslug のページから投稿されて保存されている件数が取得できます。( LIKE 検索しているので、slug が連番のフォームがあると誤カウントする場合があります。その場合は、 URL を利用するなど適宜対応してください。 )

(例) http://example.com/test-form/ に設置したフォームからの投稿件数をカウントするのであれば、 my_contactfrom7_count_178841('test-form') と呼び出す。

テンプレートファイルのフォームを表示する部分で、phpで 条件分岐させるようにしてください。

投稿2019/03/11 11:34

編集2019/03/11 22:50
CHERRY

総合スコア25218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EzrealTrueshot

2019/03/11 16:37

ありがとうございます! my_contactfrom7_count_178841('slugの名前')が何をreturnするのか見たく、さっそく組み込んだところ Warning: Use of undefined constant meta_query - assumed 'meta_query' (this will throw an Error in a future version of PHP) in /var/www/html/wp-content/themes/twentyseventeen/functions.php on line 676 このようなエラーが出てしまいました。
CHERRY

2019/03/11 22:50 編集

失礼しました。 シングルクオートが抜けてますね。 $args['meta_query'] のように meta_query の前後にシングルクオートが必要です。
EzrealTrueshot

2019/03/12 03:29

ありがとうございます! 最初はなにも表示されず、?状態でしたが、フォームを送信して再びフォーム画面に戻ってみると、1と表示されておりました。続けてフォームを送信するたびに数が増えていきました。 このあと、フォームを描写させている箇所を見つけて、規定回数以上になったらif文で描写させないといった処理をやれば、やりたかったことができそうです。 ありがとうございました!
CHERRY

2019/03/12 03:44

確かにデータがない場合に null が返りますね。 if(isset($forms)) { return count($forms); } else { retuen 0; } のような感じで データがない場合は、明示的に 0 を返した方が良いかもしれないですね。
guest

0

投稿2019/03/11 09:15

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問