Измените адрес электронной почты и отображаемое имя с помощью действия фильтра


Я пытаюсь переопределить отображаемое имя "от" и адрес электронной почты с помощью функции 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() уже установлены; приведенный выше код был упрощен для удобства чтения.

Author: butlerblog, 2012-09-24

1 answers

Пара возможностей.

Используйте API настроек , чтобы добавить поле формы где-нибудь в вашей административной области , где пользователь может ввести адрес электронной почты, который он хочет использовать. Извлеките его в своей подключенной функции с помощью 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.
}

Используйте объект и сохраните сообщение от электронной почты как свойство. Это было бы правильным решением, если вам нужно изменить сообщение от электронной почты на на основе каждой отправки.

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

Используйте глобальный. Это (вероятно) ужасная идея. Если вам нужно каждый раз менять адрес электронной почты, используйте объект и свойство (см. Выше).

<?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;
}
 5
Author: chrisguitarguy, 2012-09-24 03:51:31