WordPress Download Manager でダウンロードされた時に、メールを送るようにする

main_dlmail
WordPressでファイルをダウンロードできるようにするプラグインはいろいろありますが「WordPress Download Manager」は、わりと使ってる方は多いのではないでしょうか。
ファイルをダウンロードさせる目的はいろいろでしょうが、ダウンロードされたらすぐ知りたい事ってありませんか?。
例えばクライアントにダウンロードリンクを貼ったメールを送ったけど、なかなかダウンロードしてくれない時はダウンロードしてくれたかどうかを管理画面を何回も見たりしてませんでしょうか。

そんな時は以下のコードを my-plugin.php に張り付けてください。

/**
 * Download Managerでダウンロードされる時にメールを送る
 *
 * Download Manager Ver 2.7.92
 * Use do_action("wpdm_onstart_download", $package); in process.php
 * License: GPLv2 or later
 */
function nendebcom_mail_wpdm_onstart_download( $package ) {

	//ゴミ箱に入ってたらダウンロードできなくする。
	if( $package['post_status'] == 'trash' ){
		status_header( 403 );
		die;
	}

	//TimeZone
	date_default_timezone_set('Asia/Tokyo');

	//mailto
	$admin_email = get_option( 'admin_email' );

	//subject
	$download_subject = 'Download Manager よりダウンロードされました';

	//contents
	$download_message  = '';
	$download_message .= '[download_id] '		. $package['ID'] . "\r\n";
	$download_message .= '[download_name] '		. $package['post_title'] . "\r\n";
	$download_message .= '[download_count] '	. ( $package['download_count'] + 1 ) . "\r\n\r\n";
	$download_message .= '[tracking_referer] '	. esc_url( $_SERVER['HTTP_REFERER'] ) . "\r\n";
	$download_message .= '[tracking_ip] '		. $_SERVER['REMOTE_ADDR']   . "\r\n";
	$download_message .= '[tracking_date] '		. date("Y-m-d H:i:s")  . "\r\n";
	$download_message .= '[useragent] '		. esc_attr( $_SERVER["HTTP_USER_AGENT"] ) . "\r\n";
	$download_message = htmlspecialchars( $download_message, ENT_QUOTES, 'UTF-8' );

	//send downloaded mail
	@wp_mail( $admin_email, $download_subject, $download_message );

	return $package;
}
add_action( 'wpdm_onstart_download', 'nendebcom_mail_wpdm_onstart_download' );

 


 

mailto

mailto の所はメールの送り先です。 get_option( ‘admin_email’ ) で管理者に送られます。変更したい場合は直に書き換えてください。

	$admin_email = '○○○@○○○○.com';

 

subject

subject はメールのタイトルです。好きな文章に変更してください。

その他

もし、特定のダウンロードだけメールが欲しい場合は $package[‘ID’] で特定できますので @wp_mail~ の所を if文 で限定してください。

例: ポストID が「93」のダウンロードファイルだけメールを送る。

	if( $package['ID'] == 93 ){
		//send download mail
		@wp_mail( $admin_email, $download_subject, $download_message );
	}

 

(バグ?) ゴミ箱に入ってたらダウンロードできなくする。

ダウンロードファイルの設定は 管理画面->Downloads で行います。これはカスタムポスト(wpdmpro)を利用しています。

通常、他の投稿記事内に ここ(wpdmpro)で生成したショートコードを貼るかダウンロード用リンクを張り付けてユーザーにダウンロードしてもらいますが、このダウンロードリンクは「下書き」にしても「ゴミ箱」にいれてもダウンロードできてしまいます。
という事で、ゴミ箱に入ってたらダウンロードできなくする コードを追加しました。

ちなみに私は登録したカスタムポストページ(wpdmpro)は見えてしまうので「下書き」にしています。

 
 

追記

Twitterより「登録したユーザーがDLした場合、誰がDLしたかもメールの通知に含ませることって可能ですか? 」て質問がきましたので試してみました。ただしログインしたユーザーになります。
どの情報が欲しいかは「関数リファレンス/get currentuserinfo」を見てください。

$download_message = htmlspecialchars( $download_message, ENT_QUOTES, ‘UTF-8’ ); より上に設置してください。

	if( is_user_logged_in() ){
		global $current_user;
		get_currentuserinfo();
		$download_message .= '[lastname] '  . $current_user->user_lastname . "\r\n";
		$download_message .= '[firstname] ' . $current_user->user_firstname . "\r\n";
	}

 
 
ダウンロードメールをいくつか見ていると USER AGENT が クローラーの場合があります。
たまにならいいのですが、多い場合はサーバーに負荷がかかるかもしれませんので USER AGENT の特定できそうな文字でダウンロードをキャンセルします。

	//Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
	$pos = strpos( $remote_useragent , 'bingbot');
	if( $pos !== false ){
		status_header( 403 );
		die;
	}

 
 

参考

WordPress Download Managerプラグイン
https://wordpress.org/plugins/download-manager/

関数リファレンス/is user logged in
http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/is_user_logged_in

関数リファレンス/get currentuserinfo
http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_currentuserinfo