Contact Form 7で入力された改行を置換または削除する方法
Wordpressのプラグインである「Contact Form 7」において
- ユーザーが入力した改行を全部置換しよう
というお話です。
ちなみに、今回紹介する方法では「全部置換する」または「全部置換しない」のどちらかしか選べませんので、もっと細かい条件分岐による置換を実現したい方には全く向いてません。あしからず。
その目的のためだけのプラグイン『Word-Wrap Remover』を作ります
<?php /* Plugin Name: Word-Wrap Remover for Contact Form 7 Plugin URI: http://d.hatena.ne.jp/Aoba/20100418 Description: remove all word-wrap for Contact Form 7 Version: 1.0 Author: Aoba Author URI: http://d.hatena.ne.jp/Aoba/ */ function my_content_filter($content) { $search = '/\n/'; $replace = ' / '; return preg_replace($search, $replace, $content); } add_filter('wpcf7_mail_tag_replaced', my_content_filter, 9); ?>
導入手順
Tips?
初期状態では改行コードは「 / 」(スペース+スラッシュ+スペース)に変換されます。もし違う文字に変換したい場合は $replace に突っ込む文字列を書き換えて下さい。置換文字列は何文字でも構いませんが、もし全角文字を含む文字列に置換したい場合は、必ず保存するファイルの文字コードをUTF-8にしてください。
なお、改行コードを置換ではなく削除したい場合は $replace を、
$replace = '';
こうすればOKです。
置換処理を停止したい場合は、プラグインを停止してください。
その他にも、CSVを作成する場合は、入力されたデータに含まれる「,(半角カンマ)」を置換したい!などというケースもあると思いますが、PHPのプログラムを書ける方なら、上記のソースを参考にすぐに機能追加できると思います。
注意点
ただのプラグインなのでWordpressやContact Form 7を破壊することはありません。
しかし、プログラムの改変にミスると誰かが入力したデータを破壊してしまう可能性は高いです。それがもしお客様が入力してくださったお問い合わせだったりしたら…?恐ろしいですよね。「もっかい入力して♪」なんてなかなか言えないし。なので、
- 導入前に本当に必要か検討する
- 導入前にフォームからの投稿受付を一旦停止する
- 導入後はすべてのケースを網羅した送信テストを行った後、投稿受付再開する
またすべての作業は自己責任でお願いします。なんらかのトラブルが生じても私は責任を負えません〜。
あり得る質問1:なんで改行を消したいの?
Contact Form 7の機能を使いつつ、CSVやTSVなどのデータを作成したいから。
もちろんメールを受信した後、テキストエディタなどにコピペして一括削除してもいいのだが、件数が多い場合なかなか面倒な作業になるのと、メール本文を解析して直接データとして取り込むような場合に対応するために、事前にできるならやってしまおうという狙いです。
あり得る質問2:もっと簡単な方法ないの?
「改行をできるだけ入れさせたくないんだー」程度なら、
- textareaじゃなくてtextフィールドを使いましょう
完璧には防げませんが、それなりに効果的かつ圧倒的に楽です。
以上!