在自定义函数内使用wp_mail时出错

时间:2017-09-04 作者:Eckstein

我有这个功能,可以为我发送各种电子邮件:

function tps_send_email($emailTo, $subject, $content) {
    //Allow HTML in email
    function tps_set_html_email_content_type() {
        return \'text/html\';
    }
    add_filter( \'wp_mail_content_type\', \'tps_set_html_email_content_type\' );

    //Send the email
    $mailSent = wp_mail($emailTo, $subject, $content);

    //Reset HTML content type back to text only (avoids conflicts)
    remove_filter( \'wp_mail_content_type\', \'tps_set_html_email_content_type\' );

    return $mailSent;
}
我使用它,这样我就不必在每次发送wp\\U邮件时手动设置内容类型。但是,如果我在另一个函数中多次使用此函数,就像这样:

function my_custom_function(){
    $mailTo = \'[email protected]\';
    $subject = \'Some subject line\';

    $emailTemplate1 = \'template 1 content goes here\';
    tps_send_email($emailTo, $subject, $emailTemplate1 );

    if (some condition) {
        $emailTemplate2 = \'template 2 content goes here\';
        //send another email
        tps_send_email($emailTo, $subject, $emailTemplate2  );
    }
}
第一封邮件发送正常,但第二封邮件会抛出错误Fatal error: Cannot redeclare tps_set_html_email_content_type()... (这是我的tps_send_email() 函数)。

我做错了什么?

1 个回复
最合适的回答,由SO网友:Milan Petrovic 整理而成

那是因为你已经把函数tps_set_html_email_content_type 内部tps_send_email, 每次你打电话,它都会宣布tps_set_html_email_content_type 再次运行。只需将其移出:

function tps_set_html_email_content_type() {
    return \'text/html\';
}

function tps_send_email($emailTo, $subject, $content) {
    add_filter( \'wp_mail_content_type\', \'tps_set_html_email_content_type\' );

    //Send the email
    $mailSent = wp_mail($emailTo, $subject, $content);

    //Reset HTML content type back to text only (avoids conflicts)
    remove_filter( \'wp_mail_content_type\', \'tps_set_html_email_content_type\' );

    return $mailSent;
}
我不知道为什么要首先将一个函数放在另一个函数中,但这从来都不是一个好主意,即使PHP支持它。

结束

相关推荐

"Reply-to Address" Email

我在过去几天的网络上搜索了;回复地址“;但运气不好,所以,我来了。在我的wordpress网站上,有多个店主可以销售他们的产品。当访问者购买某个物品(由不同的所有者列出)时,该特定所有者会收到一封电子邮件通知(请注意,在结账过程中必须输入访问者的电子邮件地址)然而,电子邮件来自;“管理”;电子邮件帐户。我搜索了如何设置“;“回复”;地址,以便所有者可以直接回复客户的电子邮件地址,而不是管理员帐户。下面是我看到的一个我正在努力实现的示例:在此图像中,该站点为abc.ca 以及[email protected]