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