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

Вопрос или проблема

Я пытаюсь переопределить имя отображения “от” и адрес электронной почты, используя функцию wp_mail(). Я использую фильтр wp_mail_from, чтобы изменить его с помощью моей кастомной функции, используя add_filter('wp_mail_from','abcisupport_wp_mail_from').

Если я зафиксирую значение, оно вернет адрес, так что все подключено правильно. Если я использую аргумент, оно возвращает значения по умолчанию сетевого сайта. Как я могу передать значение в аргументы (здесь: $email и $name) в мои переопределяющие функции?

function abcisupport_wp_mail_from($email) {
  return $email; //возвращает наш адрес электронной почты по умолчанию для сетевого сайта
  /* return '[email protected]'; // возвращает  [email protected] как адрес отправителя*/
}

function abcisupport_wp_mail_from_name($name) {
  return $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() уже установлены; код выше был упрощен для удобства чтения.

Несколько возможных вариантов.

Используйте 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; // у нас ничего нет в опции, возвращаем значение по умолчанию.
}

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

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

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

        // изменяем адрес электронной почты
        self::$from_email="[email protected]";

        wp_mail( /* параметры здесь */ );

        // вам, вероятно, не нужно делать это.
        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()
{
    // глобализируем и изменяем электронную почту
    global $wpse66067_email;
    $wpse66067_email="[email protected]";

    add_filter('wp_mail_from', 'wpse66067_from_email');

    wp_mail( /* параметры здесь */ );
}

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

    return $e;
}

Этот простой фрагмент кода сработал для меня, чтобы изменить WordPress <[email protected]> на адрес отправителя по умолчанию:

// Изменить адрес "От".
add_filter( 'wp_mail_from', function ( $original_email_address ) {
    return '[email protected]';
} );

// Изменить имя "От".
add_filter( 'wp_mail_from_name', function ( $original_email_from ) {
    return 'Джон Доу';
} ); 

Надеюсь, это поможет.

Ответ или решение

Изменение адреса электронной почты и отображаемого имени в WordPress с помощью фильтров — это задача, которую можно решить, используя хуки wp_mail_from и wp_mail_from_name. В данной статье мы подробно рассмотрим, как это сделать, а также предложим несколько оптимальных решений для различных сценариев.

Основные хуки для изменения адреса и имени отправителя

  1. Изменение адреса электронной почты отправителя

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

    add_filter('wp_mail_from', 'my_custom_wp_mail_from');
    function my_custom_wp_mail_from($original_email_address) {
       return '[email protected]'; // замените на нужный адрес
    }
  2. Изменение отображаемого имени отправителя

    Для изменения имени отправителя используйте фильтр wp_mail_from_name.

    add_filter('wp_mail_from_name', 'my_custom_wp_mail_from_name');
    function my_custom_wp_mail_from_name($original_email_from) {
       return 'Имя Отправителя'; // замените на нужное имя
    }

Передача значений в функции

При использовании вышеуказанных фильтров вы можете изменить адрес и имя постоянно, но если вам необходимо изменять их в зависимости от контекста (например, при отправке различных писем), можно воспользоваться несколькими подходами.

1. Использование опций в административной панели

Если вы хотите, чтобы пользователи могли самостоятельно задавать адрес и имя отправителя, вы можете использовать API настроек WordPress для добавления полей в административную панель. Сохраните указанные значения с помощью get_option и изменяйте их в фильтрах.

// Пример кода для получения настроек
add_filter('wp_mail_from', 'custom_wp_mail_from');
function custom_wp_mail_from($original_email_address) {
    $custom_email = get_option('custom_email_option'); // замените на ваше имя опции
    return !empty($custom_email) ? $custom_email : $original_email_address;
}

2. Класс для работы с отправкой писем

Если вам нужно менять адрес и имя отправителя для каждой отправки письма, вы можете создать класс, который будет управлять этой логикой.

class EmailHandler {
    private static $from_email = '[email protected]';

    public static function send_mail($to, $subject, $message) {
        add_filter('wp_mail_from', array(__CLASS__, 'override_from_email'));
        add_filter('wp_mail_from_name', array(__CLASS__, 'override_from_name'));

        wp_mail($to, $subject, $message);

        remove_filter('wp_mail_from', array(__CLASS__, 'override_from_email'));
        remove_filter('wp_mail_from_name', array(__CLASS__, 'override_from_name'));
    }

    public static function override_from_email($email) {
        return self::$from_email; // или измените логику
    }

    public static function override_from_name($name) {
        return 'Имя отправителя'; // измените логику по необходимости
    }
}

Заключение

Изменение адреса электронной почты и отображаемого имени отправителя в WordPress возможно с использованием фильтров wp_mail_from и wp_mail_from_name. Вы можете использовать глобальные настройки, хранить данные в объекте или использовать настройки администратора для динамической настройки значений. Убедитесь, что имплементируете изменения согласно потребностям вашего проекта, давая пользователю гибкость ввода необходимых данных и управления этим процессом.

Оцените материал
Добавить комментарий

Капча загружается...