如何讓WordPress可以設定多個管理員信箱?


作者: | 2011/02/22 16:33:26 | 留言



WordPress有著非常方便易用的信件通知功能,但預設上卻無法設置多個管理員信箱,如果我們希望系統在寄出通知信 (如新用戶註冊、回覆留言等) 時,能同時寄給多個管理員時,是否有辦法做到?

在我們撰寫外掛插件(Plugin)或佈景functions.php時,如果有寄送信件的需求時,我們會使用wp_mail這個函式來處理:


// $to參數要指定一個寄送的E-mail地址,其後參數依序為信件主題、內容、標題、附件
wp_mail( $to, $subject, $message, $headers, $attachments );

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 函式完整的宣告程式碼:


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;
}

我們只要把第一個參數視為「很多E-mail地址」的陣列,再用一個迴圈把所有的程式內容包起來,就大功告成了:


// 第一個參數改名了
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;
}

修改完成了,現在到WP後台的「設定/一般」裡面的電子郵件信箱,只要以,區隔每個信箱,例如:[email protected],test2test.com 就能設定多組E-mail信箱。

參考資料:
wp_mail的官方codex說明


標籤:, , ,

分類:,

本文作者是Audi Lu

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

*

*

*

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料