Вопрос или проблема
Я пытаюсь переопределить имя отображения “от” и адрес электронной почты, используя функцию 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
. В данной статье мы подробно рассмотрим, как это сделать, а также предложим несколько оптимальных решений для различных сценариев.
Основные хуки для изменения адреса и имени отправителя
-
Изменение адреса электронной почты отправителя
Используйте фильтр
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]'; // замените на нужный адрес }
-
Изменение отображаемого имени отправителя
Для изменения имени отправителя используйте фильтр
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
. Вы можете использовать глобальные настройки, хранить данные в объекте или использовать настройки администратора для динамической настройки значений. Убедитесь, что имплементируете изменения согласно потребностям вашего проекта, давая пользователю гибкость ввода необходимых данных и управления этим процессом.