如何讓WordPress可以設定多個管理員信箱?
| 2011/02/22 | 留言
WordPress有著非常方便易用的信件通知功能,但預設上卻無法設置多個管理員信箱,如果我們希望系統在寄出通知信 (如新用戶註冊、回覆留言等) 時,能同時寄給多個管理員時,是否有辦法做到?
在我們撰寫外掛插件(Plugin)或佈景functions.php時,如果有寄送信件的需求時,我們會使用wp_mail這個函式來處理:
[code]
// $to參數要指定一個寄送的E-mail地址,其後參數依序為信件主題、內容、標題、附件
wp_mail( $to, $subject, $message, $headers, $attachments );
[/code]
2020 更新: 下面的內容是介紹大家 Hack 核心,沒想到過去的我也有這種黑歷史XDDD,以下內容就別看了,正確作法應該是去 hook wp_mail,讓它可以處理多組 E-mail,請參考:https://generatewp.com/allow-multiple-recipients-wordpress-mail/
因為之前工作急用,需要達成此功能,當下覺得hack一點點wp_mail的程式碼會是最快的作法XD,希望知道正規作法的朋友可以提供其他說明。
好的,hack的概念很簡單,因為預設的wp_mail的第一個參數,只能處理一個E-mail地址,所以稍稍加一點code進去,同時也確保讓外頭使用wp_mail的程式不受影響。首先請打開 wp-includes/pluggable.php 尋找大約 270行左右,會發現 wp_mail 函式完整的宣告程式碼:
[code]
function wp_mail( $to, $subject, $message, $headers = ”, $attachments = array() ) {
// Compact the input, apply the filters, and extract them back out
extract( apply_filters( ‘wp_mail’, compact( ‘to’, ‘subject’, ‘message’, ‘headers’, ‘attachments’ ) ) );
/*
/ ………..這裡略過很多行,直接到最後…………../
*/
// Send!
$result = @$phpmailer->Send();
return $result;
}
[/code]
我們只要把第一個參數視為「很多E-mail地址」的陣列,再用一個迴圈把所有的程式內容包起來,就大功告成了:
[code]
// 第一個參數改名了
function wp_mail( $targets, $subject, $message, $headers = ”, $attachments = array() ) {
// 把第一個參數用”,”切成陣列,表示預計每組E-mail是用”,”來區隔
$tars = explode(“,”, $targets);
// 用foreach,針對每組E-mail,都做一次原本wp_mail會做的事
foreach($tars as $to)
{
// Compact the input, apply the filters, and extract them back out
extract( apply_filters( ‘wp_mail’, compact( ‘to’, ‘subject’, ‘message’, ‘headers’, ‘attachments’ ) ) );
/*
/ ………..這裡略過很多行,直接到最後…………../
*/
// Send!
$result = @$phpmailer->Send();
} // foreach的結尾,記得放在return前
return $result;
}
[/code]
修改完成了,現在到WP後台的「設定/一般」裡面的電子郵件信箱,只要以,區隔每個信箱,例如:[email protected],test2test.com 就能設定多組E-mail信箱。
參考資料:
wp_mail的官方codex說明
標籤:WordPress, WordPress開發, wp mail, 網站設計
本文作者是Audi Lu