10
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

WordPress プラグイン slack-contact-form-7 で入力内容まで Slack に送るプチハック

Slack はなかなか便利

Slack を業務で使っている。U/Iは馴染めないけれど、カスタマイズ方法が提供されてて、ツールも豊富。

サイトは WordPress を使っている

CMSなんで編集もしやすいしプラグインもテーマも揃っている。(バージョンアップが頻繁過ぎるのが玉に瑕だけど)
そうなると、問い合わせフォームはどうしても珠玉の名作 Contact-form-7プラグイン とかになる。
折角 Slack を使っているんだから問い合わせも通知させたいよね。

問い合わせ時に Slack に通知する

ということで
Slackプラグイン + Contact-form-7 + Slack-contact-form-7プラグイン を入れると問い合わせ時に Slack に通知はされる。
されるのだが・・・

Someone just sent a message through *コンタクトフォーム 1* _Contact Form 7_. Check your email!
送られてくるのなんかタイトルだけじゃん!?

これでメールを見に行くのは2度手間なのでプチハックする。

注1:Slackプラグインの設定で ☑When someone sent message through Contact Form 7 にチェックすること。
注2:Webhook のURL は、右URLから取得可能: https://slack.com/services/new/incoming-webhook

通知だけじゃなく入力内容も送るプチハック

wp-content/plugins/slack-contact-form-7/slack-contact-form-7.php を以下の様に修正する。

            if ( $sent ) {
+               $submission = WPCF7_Submission::get_instance();
+               $formdata = $submission->get_posted_data();
+               $contents = '';
+               foreach ($formdata as $key => $val) {
+                   if (substr($key, 0, 1) != '_') {
+                       if ( is_array($val) ) {
+                           $contents .= $key . ':' . implode(',', $val) . "\n";
+                       } else {
+                           $contents .= $key . ':' . $val . "\n";
+                       }
+                   }
+               }

                return apply_filters( 'slack_wpcf7_submit_message',
-                   sprintf(
-                       __( 'Someone just sent a message through *%s* _Contact Form 7_. Check your email!', 'slack' ),
-                       is_callable( array( 
-                       $form, 'title' ) ) ? $form->title() : $form->title
-                   ),
+                   $contents,
                    $form,
                    $result
                );
            }

contact-form-7 のインスタンスから内容を取得する。
キーが _wpcf7* みたいなのはコントロールっぽいので除外する。
後は、タイトルを送っているところを丸っと消して、結合した内容を送信すればOK。

これでメールを開く手間をかけずに #Slack だけで内容を確認できるようになりました。

一応、こんな感じで slack のチャンネルに送られる。

your-name:a
your-email:b@c.com
your-subject:d
your-message:e
your-checkbox:a,b
your-radio:1

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
10
Help us understand the problem. What are the problem?