WordPressのメールフォームプラグインMW WP Formの管理者宛メール送信機能は、画像アップロードタグ mwform_image
でのアップロード画像添付と画像ファイルへのリンクを含めることができます。これはとても便利なのですが、画像ファイルのサイズが大きいと(メガ単位?)、場合によってはメールサーバで拒否られることもあるため、使いどころが難しいです。
アップロードした画像は添付せず、画像ファイルへのリンクだけをメール本文に記述できればいいんじゃなかろうか?ということで対応してみました。(ページ下部に注記したことがあるのでそのへんも必ず読んで)
まず、管理者宛メールに画像添付および画像ファイルへのリンクを含めるには、WM WP Form管理画面の「管理者当てメール設定」の本文に、mwform_imageタグのname要素を書き込みます。
例えばフォーム画面で
[mwform_image name="画像ファイル" id="image"]
のようなタグを利用した時は「管理者当てメール設定」の本文には、
何か色々管理者当てメールの本文をだらだらと
{画像ファイル}
そのほか何か色々管理者当てメールの本文をだらだらと
このように {画像ファイル}
というタグを埋め込みます。
こうするとアップロードした画像添付と画像ファイルへのリンクがメール本文に貼り付けられます。ここの画像添付でファイルサイズが大きいとメールサーバから拒否られる、ということです。
ということで、メール本文から画像添付をなくします。
例によって functions.php
を編集することになるのですが、functions.php
はテーマディレクトリの下に配置するのが通例のようでプラグインのカスタマイズなのになぜテーマのほうをいじらなきゃならないか、若干解せないです。
またテーマによってはディレクトリを直接変更するのは良しとしないこともあるみたいで子テーマを作ってから functions.php
を設置してくれ、などもあります。
いちいち面倒くさい。まあしかし、こういった手間も作業時間として計上できるのでWordPress案件が賑わっているのでしょうね(辛口)。
(しれっと…)さて、テーマ(もしくは子テーマ化してから)のディレクトリに functions.php
を以下の内容で作成します。
mwform_admin_mail_mw-wp-form-xxx
に対する add_fileter()
でメール本文の画像ファイルの添付を無しにしてしまうフィルターです。
function delete_attachment_for_admin_mail( $Mail, $values, $Data ) {
$Mail->attachments = '';
return $Mail;
}
add_filter( 'mwform_admin_mail_mw-wp-form-xxx', 'delete_attachment_for_admin_mail', 10, 3 );
mwform_admin_mail_mw-wp-form-xxx
の xxx
の部分はMW WP Formが割り当てた番号([mwform_formkey key="ここの数字"]
)に置き換えてください。例えば [mwform_formkey key="123"]
であれば、
add_filter( 'mwform_admin_mail_mw-wp-form-123', 'delete_attachment_for_admin_mail', 10, 3 );
上記のように mwform_admin_mail_mw-wp-form-123
になります。
これで管理者宛のメールはアップロードされた画像へのリンクがあるだけでファイル添付がなくなります。
ところで注記です。この方法は mwform_image
タグだけではなく mwform_file
タグでも使えそうな気がします。そして「管理者当てメール設定」にタグの要素名を記述すると閲覧可能な添付ファイルへのリンクがメールに含まれます。つまり、そのメールを見ることができれば誰であって添付ファイルがみれてしまう、ということです。
なのでそのリンク先のファイルに対してはそれ相応のリスクを考えておかなければなりません。「取引先リスト.xlsx」や「登録者会員個人情報リスト.xlsx」などのようなファイル名を見るだけで一部の界隈がざわめき立つような添付ファイルが発生するWordPress案件においてはこういった方法は使わないほうがいいですよ、というかWordPressで何しているの?という話です。