使用筛选器操作更改电子邮件发件人和显示名称

时间:2012-09-24 作者:Michael

我正在尝试使用覆盖“发件人”显示名称和电子邮件地址wp_mail() 作用我正在使用wp_mail_from 过滤钩子以使用自定义函数修改它add_filter(\'wp_mail_from\',\'abcisupport_wp_mail_from\').

如果我硬编码该值,它将返回地址,以便正确连接。如果使用该参数,它将返回站点网络默认值。如何将值传递给参数(此处:$email$name) 到我的重写函数?

function abcisupport_wp_mail_from($email) {
  return $email; //returns our default site network email address
  /* return \'[email protected]\'; // returns  [email protected] as the from address*/
}

function abcisupport_wp_mail_from_name($name) {
  return $name; //returns our default site network display name

}

function send_abc_mail_before_submit(){
    add_filter(\'wp_mail_content_type\',create_function(\'\', \'return "text/html";\'));
    add_filter(\'wp_mail_from\',\'abcisupport_wp_mail_from\');
    add_filter(\'wp_mail_from_name\',\'abcisupport_wp_mail_from_name\');

    wp_mail($to, $subject, $mailbody, $headers);

    remove_filter(\'wp_mail_from\',\'abcisupport_wp_mail_from\');
    remove_filter(\'wp_mail_from_name\',\'abcisupport_wp_mail_from_name\');
}
注意:中的所有字段wp_mail() 功能已设置;为了便于阅读,上面的代码已经简化。

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

有几种可能性。

Use the settings API to add a form field somewhere in your admin area 用户可以在其中输入他们想要使用的电子邮件。使用在挂钩函数中检索它get_option.

如果你想在任何地方都使用同样的电子邮件,这将是一种方法。

<?php
add_filter(\'wp_mail_from\', \'wpse66067_mail_from\');
function wpse66067_mail_from($email)
{
    if($e = get_option(\'wpse66067_option\'))
        return $e;

    return $email; // we don\'t have anything in the option return default.
}
Use an object, and store the from email as a property. 如果您需要在每次发送的基础上更改发件人电子邮件,这将是一种方法。

<?php
class WPSE66067_Emailer
{
    private static $from_email = \'[email protected]\';

    public static  function send_mail()
    {
        add_filter(\'wp_mail_from\', array(__CLASS__, \'from_email\');

        // change the email
        self::$from_email = \'[email protected]\';

        wp_mail( /* args here */ );

        // you probably don\'t need to do this.
        remove_filter(\'wp_mail_from\', array(__CLASS__, \'from_email\');
    }

    public static function from_email($e)
    {
        if(self::$from_email)
            return self::$from_email;

        return $e;
    }
}
Use a global. 这(可能)是个糟糕的主意。如果每次都需要更改电子邮件,请使用对象和属性(请参见上文)。

<?php
$wpse66067_email = \'[email protected]\';

function wpse66067_send_mail()
{
    // globalize and change the email
    global $wpse66067_email;
    $wpse66067_email = \'[email protected]\';

    add_filter(\'wp_mail_from\', \'wpse66067_from_email\');

    wp_mail( /* args here */ );
}

function wpse66067_from_email($e)
{
    global $wpse66067_email;
    if($wpse66067_email)
        return $wpse66067_email;

    return $e;
}

结束

相关推荐

调用Function_Exist()比调用Apply_Filters()快还是慢

调用函数\\u exists()时,应用\\u filters()的速度是快还是慢。。。还是差异太小,不应该考虑?我在Kaiser的基础上做了一些测试,结果表明,在同时存在函数和过滤器的情况下,function\\u exists()的速度大约是3倍。如果过滤器不存在,速度将提高约11倍。没想到会这样。function taco_party() { return true; } add_filter( \'taco-party\', \'taco_party\'