ContactForm7の添付ファイルに日本語名を使う方法!WordPressのお問い合わせ画面機能をカスタマイズ!
WordPressでメールのお問い合わせページを作るプラグインで「ContactForm 7」という超有名なプラグインがあります。
通常、お問い合わせページを構築するとなると、入力欄のレイアウト・デザインや入力チェックなどどうしてもプログラムで制御しなくてはならず、工数もかかってしまいますよね。
ContactForm 7を使えば、非常にカスタマイズ性がある上に、お問い合わせページを簡単に早く作ることができるのでかなり便利です。WordPressに慣れてしまっている人にとっては十分満足のいく機能が詰まっているのも特徴です。
そんなわけで私もWordPressでお問い合わせページを構築する際には使っています。
ContactForm 7で送信した添付ファイルに日本語が使えない?
ずっと気になってはいたんですが、ContactForm 7って添付ファイルを送信することもできるじゃないですか。
何ですが添付ファイルのファイル名に日本語が含まれていると、
WordPress側で自動的に英数字に変換が行われてしまいます。
試しに添付ファイルが含まれるメールを受信してみますと、以下のようなファイル名になってしまいます。
つまり、標準では添付ファイルの名前に日本語名が使用できないということです。
日本語名が使えないと何が困るか
単にウェブサイト訪問者さん向けのメールフォームで、送信先が私なら添付ファイルの名前だけが文字化けしているのなら、さほど問題はありません。
ところが、第三者の方に向けてメールを飛ばす場合はさすがに困りますよね。
特に業務システムの一環としてWordPressを申請ページなどに採用していると、大問題だと思います。
そんなことで今回、ContactForm 7の添付ファイル機能でファイル名が文字化けせず「日本語名」を利用できるようにする方法をまとめましたので、お困りの方は是非ご覧下さい。
添付ファイル名を文字化けさせず日本語を使えるようにする方法
ContactForm 7を導入しただけでは添付ファイル名に「日本語」を使用することができない為、WordPressのシステムファイルと「ContactForm 7」のプラグインファイルの一部を編集することにより対応します。
検証環境
- Apache: 5.6.3
- WordPress: 4.5.2
- ContactForm 7 プラグイン: 4.4.2
- WP Multibyte Patch プラグイン: 2.6
今回私が動作検証したシステム環境は上記の通りです。
- 「WP Multibyte Patch」プラグインでメールの文字コードをUTF-8に変更
- WordPressシステムのメーラーの設定ファイルを書き換える
- 「ContactForm 7」プラグインファイルを書き換える
「WP Multibyte Patch」プラグインでメールの文字コードをUTF-8に変更
WordPressインストール時に標準で導入されているプラグイン「WP Multibyte Patch」。
日本語のマルチバイト文字をWordPressで扱う際に有効化すべきプラグインで、たいていの方はほぼ無意識で有効化していると思います。
ちなみに「WP Multibyte Patch」の有効無効問わず、添付ファイル名は日本語が使用できません。
実は今回このプラグインを利用します。インストールされていない方は事前にご用意下さい。
まず、「wp-content/plugins/wp-multibyte-patch/wpmp-config-sample-ja.php」ファイルをコピーし、「wpmp-config-ja.php」という名前に変更します。
1 | $wpmp_conf['mail_mode'] = 'JIS'; |
と記述された一行を
1 | $wpmp_conf['mail_mode'] = 'UTF-8'; |
に変更します。
日本語ファイル名をmd5ハッシュ値に変換する処理を無効にします。
1 | $wpmp_conf['patch_sanitize_file_name'] = true; |
と記述された一行を
1 | $wpmp_conf['patch_sanitize_file_name'] = false; |
に変更します。
WordPressシステムのメーラーの設定ファイルを書き換える
WordPressのシステムでPHPのメーラーの設定ファイルがあります。
場所は「wp-includes/class-phpmailer.php」です。このファイルを書き換えます。
1 | basename($path); |
と記述された箇所を
1 | end(explode('/', $path)); |
に書き換えます。
1 | basename($filename); |
と記述された箇所を
1 | end(explode('/', $filename)); |
に書き換えます。
「ContactForm 7」プラグインファイルを書き換える
ContactForm 7プラグイン本体のファイルも書き換えます。。
場所は「wp-content/plugins/contact-form-7/includes/formatting.php」です。
1 | $filename = basename( $filename ); |
と記述された一行を
1 | $filename = end(explode('/', $filename)); |
に変更します。
以上で作業は完了です。
ContactForm 7で作成したお問い合わせページで添付ファイルを追加してメールを送信してみて下さい。日本語名が使えるようになっていると思います。
メディアからアップロードした日本語名ファイルが文字化け
この記事の手順通りソースファイルを変更し、テスト運用していたところ、思いもしない不具合が発生しましたので報告です。
不具合は「メディア」からアップロードした日本語名のファイルが、サーバ側で文字化けしてしまうというものです。
本来、日本語名が使われているファイルに対して文字化けしないように、WordPressが自動生成した英数字に置き換える処理が行われます。通常はmd5ハッシュ値に変換する処理となっていますが無効にしました。
これだけなら文字化けは起きませんが、ファイルの保存先のファイルシステムの文字コードがUTF-8ではない場合にファイル名が文字化けしてしまいます。
この不具合を解消する方法を見つけましたので、以下の手順も行なって下さい。
場所は「wp-admin/includes/file.php」です。
1 | $move_new_file = @ move_uploaded_file( $file['tmp_name'], $new_file ); |
と記述された一行を
1 | $move_new_file = @ move_uploaded_file( $file['tmp_name'], mb_convert_encoding($new_file, 'cp932', 'utf8') ); |
に変更します。
1 | $move_new_file = @ copy( $file['tmp_name'], $new_file ); |
と記述された一行を
1 | $move_new_file = @ copy( $file['tmp_name'], mb_convert_encoding($new_file, 'cp932', 'utf8') ); |
に変更します。
最新記事 by よっき (全て見る)
- 「圧着」と「圧接」の違い!コネクタを使った効率的な配線作業! - 2019年10月26日
- 夏の暑さ対策は大丈夫?冷却性能抜群のおすすめCPUクーラー!メモリに干渉しない最強の商品を紹介! - 2018年5月1日
- 自作PC弐号機のケースを換装!SilverStone製のミニタワーで冷却性とかっこよさを追求! - 2018年3月11日
スポンサードリンク
こちらの記事もどうぞ!
記事公開日:2016年7月13日
最終更新日:2016年12月8日
追記されていました、
「メディアからアップロードした日本語名ファイルが文字化け」
についてですが、
何というファイルを直せばよいのでしょうか?
上の3つのファイル上には、ソースが見当たりませんでしたもので・・・。
教えて頂けるとうれしいです。
宜しくお願いいたします。
大変失礼致しました。
修正ファイルのパスは「wp-admin/includes/file.php」となります。
記事の方も追記させて頂きました。
ご連絡頂きありがとうございます。
こちらこそ、早々にご回答頂きまして、ありがとうございました。
しかし、何がいけないのか、ポイント2の作業を行いましたが、
残念なことに日本語ファイルの文字化けは直りませんでした・・・。
検証環境
Apache: 2.4.x
WordPress: 4.7
ContactForm 7 プラグイン: 4.6
WP Multibyte Patch プラグイン: 2.8.1
もう少し勉強します。
ありがとうございました。
m(_ _)m
ContactForm 7の添付ファイルを日本語ファイル名で送りたく、ググっていたところ、ここにたどり着きました。
現在のバージョンですと、若干修正箇所が違うようですが、無事、日本語ファイル名で送れます。
ただ、WordPressやContactForm7をバージョンアップすると、ファイルがデフォルトになってしまいますよね・・・
フックをfunctions.phpに記述して、バージョンアップされても大丈夫なようにできますかね?
大変ありがたい記事をありがとうございます!
ファイル名を日本語化できました!
ただ、ファイル名を日本語化するにあたって、
WP Multibyte Patchの変更の箇所の、
『wpmp-config-ja.phpという名前に変更』とありましたが、
このファイル名では私は日本語名に変わりませんでした。
jpを取って、wpmp-config.phpにしたら無事日本語化できました。