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:[email protected]
your-subject:d
your-message:e
your-checkbox:a,b
your-radio:1