こんにちは。YOSHITAKA(@YOSHITA19704216)です。
- WordPress Download Managerをつかってダウンロード後にメールが送信されるように設定できます。
Contents
WordPress Download Managerで指定したアドレスにメールを自動送信する方法
- WordPress Download Managerというプラグインを利用するのでご準備ください。
- 総合開発環境を準備してください。()
プラグインの作成
プラグインの作り方
① FTPで wp-content/plugins フォルダに my-plugin フォルダを作ります
② テキストエディタで my-plugin.phpファイル を下記を参照して新規作成し my-plugin フォルダへアップロードします。
③ WordPress管理画面で my-plugin を有効化 してください。
my-plugin.php の内容は下記のようにしてください。
<?php
/*
Plugin Name: my-plugin
Plugin URI:
Description: My Plugin For WordPress.
Version: 1.0.0
Author:
Author URI:
License: GPLv2 or later
*/
// ここからコードをいれてください。
*ファイルは日本語を使う場合は UTF-8N形式(BOM無)で 保存してください。
*フォルダ名、ファイル名も他のプラグイン名と被らなければ自由です。(日本語はだめです)
*Plugin Nameとか他も自由に名前をつけてください。
Plugin Name: プラグインの名前
Plugin URI: プラグインの説明と更新を示すページの URI
Description: プラグインの短い説明
Version: プラグインのバージョン番号。例: 1.0.0
Author: プラグイン作者の名前
Author URI: プラグイン作者の URI
License: ライセンス名の「スラッグ」 例: GPL2
引用:https://nendeb.com/10
さらに抜粋していきます。
最初に入れておきたいコード まずは次の記事を読んで、このコードを入れてみましょう。
マイ・プラグイン を作りましたがこれから様々な フィルターフック や アクションフック を入れていく中で、プラグイン の読み込み順のせいで フィルターフック や アクションフック が効かない場合があります。
これは、WordPressの起動時に まだ読み込んでいない プラグイン への フィルターフック や アクションフックを行っても 後読みの プラグイン 方が 動作してしまうので 効いてない という事になります。(特にremove_actionやremove_filter)
全ての フィルターフック や アクションフック が そうという訳ではありませんが事前に潰していく事もおすすめです。
my-plugin を最後に読み込むようにする
指定のプラグインを最後に読み込むようにする地味な アクションフック です。
my-plugin を最後に読み込むようにするには以下のコードを my-plugin.php に張り付けてください。
プラグイン(どれでも)を有効化した時に並べ替えて再保存します。
if ( ! function_exists( 'nendebcom_plugin_last_load' ) ) :
/*
* my-plugin を最後に読み込むようにする。
*
* License: GPLv2 or later
*/
function nendebcom_plugin_last_load() {
$this_activeplugin = '';
$this_plugin = 'my-plugin/my-plugin.php'; //最後に読み込みたいプラグイン
$active_plugins = get_option( 'active_plugins' );
$new_active_plugins = array();
foreach ( $active_plugins as $plugins ) {
if( $plugins != $this_plugin ){
$new_active_plugins[] = $plugins;
}else{
$this_activeplugin = $this_plugin;
}
}
if( $this_activeplugin ){
$new_active_plugins[] = $this_activeplugin;
}
if( ! empty( $new_active_plugins ) ){
update_option( 'active_plugins' , $new_active_plugins );
}
}
add_action( 'activated_plugin', '〇〇_plugin_last_load' );
endif; // 〇〇_plugin_last_load
プラグインの作成
マイ・プラグインの更新を非表示にしておきます。
更新することもないので更新する必要がないですね。
これは 「WordPressプラグインディレクトリ」に登録するのではなく、自分のサイト環境にあわせたPHPのコードを入れる為のプラグインです。
プラグイン名(my-plugin)は、自由につけてもいいのですが、もし 誰かが同名のプラグインを「WordPressプラグインディレクトリ」に登録してしまうと、管理画面で「更新」表示が出てしまいます。
うっかり更新すると 全然違うプラグインに入れ替わってしまいます。
プラグインの更新通知のサンプル
※これは合成画像です。
そこで「my-plugin」だけ更新を非表示するコードを紹介します。
今の所「my-plugin」は「WordPressプラグインディレクトリ」には無いので大丈夫ですが 念のため入れておいた方がいいでしょう。
my-plugin の更新を非表示
以下のコードを my-plugin.php に張り付けてください。
/*
* my-pluginの更新を非表示
*
* License: GPLv2 or later
*/
function nendebcom_hide_myplugin_updateplugin( $data ) {
if ( isset( $data->response['my-plugin/my-plugin.php'] ) ) {
unset( $data->response['my-plugin/my-plugin.php'] );
}
return $data;
}
add_filter( 'site_option__site_transient_update_plugins', 'nendebcom_hide_myplugin_updateplugin' );
※[‘my-plugin/my-plugin.php’]」の所が [‘フォルダ名/ファイル名’] になってますので変更している場合はあわせてください。
※my-pluginを停止すると更新通知が出てきます(プラグインディレクトリに載った場合)ので注意してください。
※他にも更新してほしくないプラグインがあれば if( isset~){ ~~ } までをコピーして追記してください。
※Jetpackの「自動更新(プラグインを常に自動で更新)」に設定していてもこのコードのおかげで自動更新されませんでした。
引用:https://nendeb.com/350
コード挿入
ソースコードを導入するのは総合開発環境であればなんでもOKです。自分はVSCodeを利用して作成しました
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 〇〇_mail_wpdm_onstart_download( $package ) {
//ゴミ箱に入ってたらダウンロードできなくする。
if( $package['post_status'] == 'trash' ){
status_header( 403 );
die;
}
//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_i18n("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', '〇〇_mail_wpdm_onstart_download' );
追加で管理者とログインユーザーにメールを送るように変更します。
function aidf_mail_wpdm_onstart_download($package)
{
//ゴミ箱に入ってたらダウンロードできなくする。
if ($package['post_status'] == 'trash') {
status_header(403);
die;
}
//mailto 送り先 現在は管理者
$admin_email = get_option('admin_email');
//subject メールのタイトル
$download_subject_admin = 'ホームページからファイルがダウンロードされたことをお伝えします。';
$download_subject_valuer = 'ダウンロードありがとうございます。';
// 誰がDLしたかメールの通知に含ませる
if (
is_user_logged_in()
) {
global $current_user;
wp_get_current_user();
//mailto ログインユーザーの情報を取得します。
$user_email = $current_user->user_email;
$download_message_admin = '';
$download_message_admin .= '現在ダウンロードが行われました。ダウンロード情報をお伝えします。' . "\r\n\r\n";
$download_message_admin .= '【ダウンロードしたユーザー情報】' . "\r\n\r\n";
$download_message_admin .= '[姓] ' . $current_user->user_firstname . "\r\n";
$download_message_admin .= '[名] ' . $current_user->user_lastname . "\r\n";
$download_message_admin .= '[メールアドレス] ' . $current_user->user_email . "\r\n\r\n";
}
//管理者用メールcontents
$download_message_admin .= '【ダウンロード情報】' . "\r\n\r\n";
$download_message_admin .= '[ダウンロードID] ' . $package['ID'] . "\r\n";
$download_message_admin .= '[ダウンロードファイル名] ' . $package['post_title'] . "\r\n";
$download_message_admin .= '[現在までのダウンロード数] ' . ($package['download_count'] + 1) . "\r\n";
$download_message_admin .= '[ダウンロード日時]' . date_i18n("Y-m-d H:i:s") . "\r\n\r\n";
$download_message_admin .= '【詳細情報】' . "\r\n\r\n";
$download_message_admin .= '[tracking_referer] ' . esc_url($_SERVER['HTTP_REFERER']) . "\r\n";
$download_message_admin .= '[tracking_ip] ' . $_SERVER['REMOTE_ADDR'] . "\r\n";
$download_message_admin .= '[useragent] ' . esc_attr($_SERVER["HTTP_USER_AGENT"]) . "\r\n";
$download_message_admin = htmlspecialchars($download_message_admin, ENT_QUOTES, 'UTF-8');
//send downloaded mail_admin
@wp_mail($admin_email, $download_subject_admin, $download_message_admin);
//評価者用メールcontents
$download_message_valuer = '';
$download_message_valuer .= 'ダウンロードについての注意事項をお伝えします。' . "\r\n\r\n";
$download_message_valuer .= '【ダウンロード情報】' . "\r\n\r\n";
$download_message_valuer .= '[ダウンロード日時]' . date_i18n("Y-m-d H:i:s") . "\r\n\r\n";
$download_message_valuer = htmlspecialchars($download_message_valuer, ENT_QUOTES, 'UTF-8');
//send downloaded mail_valuer
@wp_mail($user_email, $download_subject_valuer, $download_message_valuer);
return $package;
}
add_action('wpdm_onstart_download', '〇〇_mail_wpdm_onstart_download');
mailto
mailto の所はメールの送り先です。
get_option( ‘admin_email’ ) で管理者に送られます。
変更したい場合は直に書き換えてください。
例
1 | $admin_email = '○○○@○○○○.com' ; |
subject
subject はメールのタイトルです。
好きな文章に変更してください。
知らないとできない事前知識
プラグインを有効にしないと動作しないので必ずチェックしておきましょう。
自分は忘れて、ちょっと時間をかけてしまいました。
この機能を実装するには次の理解も必要なるので参考にして、修正してください。
WordPressの知識
関数リファレンス/is user logged in
関数リファレンス/get currentuserinfo
プラグインの情報
WordPress Download Managerプラグイン
https://wordpress.org/plugins/download-manager/
です。
まとめ
今回はWordPress Download Managerでダウンロードとメール送信を同時に行う方法についてお伝えしました。
詳細は以下を参考にしてください。
参考にしたサイトはこちら