Изменение имени и email отправителя почты с сайта на WordPress

Для начала сравним функции mail() и wp_mail(). Первая — это обычная PHP-функция, использующаяся для отправки e-mail с сайта, вторая используется с этой же целью в WordPress.

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

Как видите, отличие в одном-единственном аргументе. И что же это такое — headers? Ну например:

$headers  = "Content-type: text/html; charset=utf-8 \r\n"; 
$headers .= "From: truemisha.ru <no-reply@truemisha.ru>\r\n";

В WordPress же в качестве имени отправителя по умолчанию пишется WordPress, а в качестве e-mail wordpress@ваш_сайт.ru

Давайте это исправим и начнём с имени:

function change_name($name) {
	return 'truemisha.ru';
}
 
add_filter('wp_mail_from_name','change_name');

Код нужно вставлять в functions.php, теперь заменим e-mail:

function change_email($email) {
	return 'no-reply@truemisha.ru';
}
 
add_filter('wp_mail_from','change_email');
Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Комментарии 27

  • Михаил25 июля 2012 в 23:07 #

    Спасибо! Наконец-то мне на e-mail стали приходить письма о комментах!

  • Алексей5 марта 2013 в 13:03 #

    Дружище, ты пишешь

    В WordPress же в качестве имени отправителя по умолчанию пишется WordPress, а в качестве e-mail wordpress@ваш_сайт.ru

    Давайте это исправим и начнём с имени

    Так как и где исправить это "WordPress" на любое другое статичное имя сайта, например "Карта Спорта"?

    • Миша5 марта 2013 в 13:03 #

      код для functions.php:

      function change_name($name) {
      	return 'Карта Спорта';
      }
       
      add_filter('wp_mail_from_name','change_name');
  • login20309 марта 2013 в 21:03 #

    интересно)) еще бы текст стандартного сообщения поправить)))

    • Миша10 марта 2013 в 06:03 #

      а какого именно стандартного сообщения? в WordPress много всяких email-уведомлений))

  • annas19 апреля 2013 в 10:04 #

    Михаил, помогите разобраться, пожалуйста. Мои авторы блога получают уведомления о новых комментариях, в которых указаны e-mail и IP отправителя - как это можно убрать?? Очень буду признательна если поможете разобраться с этой проблемой. Честно говоря я отключила все плагины уведомлений, а они все равно приходят - не знаю в каком месте искать эти рассылки..

    • Миша19 апреля 2013 в 14:04 #

      Параметры -> Настройки обсуждения, снять галочку с "Отправить мне письмо, когда..."
      должно помочь по идее

  • annas19 апреля 2013 в 15:04 #

    нет не помогла, я долго мучилась и нашла - файл plugable - там просто убрать ненужные строки, всем удачи!

  • annas21 апреля 2013 в 12:04 #

    я пока лучше не нашла..

  • VRS27 января 2014 в 00:01 #

    Миша, добрый вечер.
    Столкнулась с такой заковыкой =). Поставила в настройках ВП присылать мне уведомления о комментариях.
    А ВП шлет их на емейл автора статьи, а не на главный, который в общих настройках задается.
    Можно это как-то исправить?

    • Миша27 января 2014 в 21:01 #

      Добрый вечер)
      попробуйте вот такое решение:

      function true_change_notificator( $emails, $comment_id ){
      	$new_emails = array();
      	$new_emails[] = get_option('admin_email');
      	return $new_emails;
      }
       
      add_filter( 'comment_notification_recipients', 'true_change_notificator', 20, 2);

      Сварганил на ходу, просьба отписаться о том, получилось или нет.

      • VRS28 января 2014 в 07:01 #

        да уже ближе - отправляет 2 письма: автору статьи и на блоговый майл.
        как бы еще авторский убрать из массива.

  • VRS28 января 2014 в 08:01 #

    аааа.. вот в чем дело оказывается... у меня ВП 3.7
    Написала так:

    add_filter( 'comment_moderation_recipients', 'true_change_notificator', 20, 2);

    теперь всё так как нужно.
    Спасибо!

  • Евгений2 марта 2014 в 11:03 #

    Здравствуйте. Подскажите, хотел зарегистрироваться на wordpress. Для составления имени предлагают использовать только строчные латинские буквы и цифры. Можно ли как-то обойти эти ограничения?

    • Миша2 марта 2014 в 17:03 #

      Добрый день!
      да, можно, сходу сейчас наверное код не смогу подсказать, но точно знаю, что был такой плагин.

  • Михаил Ж13 февраля 2015 в 16:02 #

    Эта статья очень помогла.

    Не могу теперь и интернетах найти как заменить текст стандартного письма при регистрации нового пользователя и при восстановлении пароля.

    Помогите, пожалуйста.

    • Миша14 февраля 2015 в 08:02 #

      Тоже не могу ничего найти.

      На вашем месте я бы просто прошелся по коду (который отправляет эти письма) по порядку в поисках каких-нибудь фильтров.

      • Михаил Ж14 февраля 2015 в 19:02 #

        Попробовал такой, но письма до сих пор приходят стандартные )=

        function wp_new_user_notification_new($user_id, $plaintext_pass = '') {
        	$user = get_userdata( $user_id );
         
        	// The blogname option is escaped with esc_html on the way into the database in sanitize_option
        	// we want to reverse this for the plain text arena of emails.
        	$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
         
        	$message  = sprintf(__('New user registration on your site %s:'), $blogname) . "\r\n\r\n";
        	$message .= sprintf(__('Username: %s'), $user->user_login) . "\r\n\r\n";
        	$message .= sprintf(__('E-mail: %s'), $user->user_email) . "\r\n";
         
        	@wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), $blogname), $message);
         
        if ( empty($plaintext_pass) )
        		return;
         
        $message  = sprintf(__('Здравствуйте, %s !'), $user->user_login) . "\r\n";
        $message  = sprintf(__('Спасибо, что присоединились к нашему замечательному огненному сервису %s !'), $blogname) . "\r\n";
        $message  = sprintf(__('Вы зарегистрировались со следующими данными:')) . "\r\n";
        	$message  = sprintf(__('Username: %s'), $user->user_login) . "\r\n";
        	$message .= sprintf(__('Password: %s'), $plaintext_pass) . "\r\n";
        $message  = sprintf(__('Зайти на сайт Вы можете по этой ссылке:')) . "\r\n";
        	$message .= wp_login_url() . "\r\n";
        $message  = sprintf(__('Всю нужную для начала работы с сервисом информацию можно найти на нашем сайте, перейдя во вкладку "подписки".')) . "\r\n";
        $message  = sprintf(__('С уважением,')) . "\r\n";
        $message  = sprintf(__('Ж М')) . "\r\n";
        	wp_mail($user->user_email, sprintf(__('[%s] Поздравляю с успешной регистрацией!'), $blogname), $message);
        }
         
        add_filter('wp_new_user_notification','wp_new_user_notification_new');
        • Миша15 февраля 2015 в 07:02 #

          Михаил, функция wp_new_user_notification() не содержит фильтров сама по себе.

          Могу порекоммендовать вам попробовать использовать плагин SB Welcome Email Editor.

  • Павел9 августа 2015 в 14:08 #

    Привет! Правильно ли я понимаю, что ответить на это сообщение-уведомление пользователь не сможет?

    В этой ф-ции:

    function change_email($email) {
    	return 'no-reply@truemisha.ru'; //если поставить реальный e-mail и пользователь нажмет "ответить" на это сообщение-уведомление, это сообщение придет на указанный email?
    }
  • 2ук2к2 октября 2015 в 13:10 #

    спасибо

  • rik25 октября 2015 в 18:10 #

    Спасибо! Отличная статья! Благодаря вашим фильтрам сделал нормальное нормальное оформление писем.
    Однако у меня непонятка. Когда на мой сайт с другого сервера приходит уведомление POST, в котором содержится почтовый адрес, то мой код, размещённый в functions.php, через условие if записывает адрес в текстовый лог и должен автоматически выслать письмо на этот адрес. Переменная с адресом приходит два раза - сразу и через 10 минут. Так вот на первый приход переменной отправки письма нет, а на второй есть.
    Проверял по логу много раз. Переменная приходит всегда два раза, а вот отправка только по второму приходу?
    В другой статье вы объясняли, что функция wp_mail возвращает true в случае успешной отправки. А как это значение вставить в текстовый лог для проверки?
    Может, думаю, хостер ввёл ограничение на одновременную отправку писем? Убрал условие if, вставил свой почтовый адрес в функцию. Так она при каждом обновлении страницы стала отсылать мне письма. За минуту с десяток набралось.
    В текстовом логе внешне различий двух строк в адресе нет, но может в первом случае ещё что-то в адрес добавляется, что в текстовый лог не записывается? Где-то я про это, связанное с очисткой адреса, читал, но сейчас не могу вспомнить. В общем не знаю на что подозревать?
    Помогите пожалуйста!

    • rik25 октября 2015 в 20:10 #

      Дополню сообщение.
      Вот этот без всяких фильтров и экшенов код я вставил в конец functions.php:

      if (isset($_POST['email'])){
      global $bo;
      $bo = $_POST['email'];
      }
      $to = $bo;
      wp_mail( $to , 'Какая-то тема', 'Какое-то сообщение');

      Прошу извинить за данную галиматью. Из меня ещё тот кодер.

      • Миша26 октября 2015 в 07:10 #

        Суть проблемы не до конца понял, но код я бы поменял:

        if (isset($_POST['email'])){
        	if( is_email( $_POST['email'] ) {
        		wp_mail( $_POST['email'] , 'Какая-то тема', 'Какое-то сообщение');
        	}
        }

        А global для чего?

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Добрый день! В принципе вам только немного нужно доработать код из этого поста - категории уже есть, цена - это и так...

  • eveniy: Добрый день Михаил, подскажите на примере как добавить свои произвольные поля в в вашу форму фильтрации: Я так понимаю...

  • Миша: Отлично! )

  • Дмитрий: сам разобрался: в настройках кастомного типа записи недавно оптимизировал настройки и переоптимизировал: в аргументе 'ta...

  • Дмитрий: У меня по какой-то причине пропало отображение (как в колонке меню слева, так и метабокс в записях ) раздела рубрик для...