Довольно удобный способ уведомления пользователей на почту о новых статьях без необходимости подключать какой-либо сервис типо feedburner или smartresponder.
Достаточно лишь того, что пользователь зарегистрирован у вас на блоге.
Никаких дополнительных плагинов не потребуется, достаточно вставить следующий код в functions.php:
function true_send_notification_mails($post_ID) { $wp_user_search = new WP_User_Query( array( 'fields' => array('user_email') ) ); $users = $wp_user_search->get_results(); $user_emails = array(); for ($i = 0; $i < count($users); $i++) { $user_emails[] = $users[$i]->user_email; } // endfor $user_emails = implode(",", $user_emails); // список емаилов через запятую $subject = "Опубликован новый пост на блоге " . get_bloginfo('name'); // тема $message = "Для того, чтобы прочитать новый пост, перейдите по ссылке <a href='" . get_permalink($post_ID) . "'>" . get_permalink($post_ID) . "</a>"; // сообщение $headers = "Content-type: text/html; charset=utf-8 \r\n"; // кодировка $headers .= "From: ". get_bloginfo('name') ." <no-reply@". ltrim(site_url(),'http://') .">\r\n"; // от mail($user_emails, $subject, $message, $headers ); return $post_ID; } add_action('publish_post', 'true_send_notification_mails');
К содержимому сообщения нет никаких ограничений, если хотите, можете запихать сюда весь пост.
$message = get_the_content($post_ID);
По поводу картинок и прочего HTML из статьи не беспокойтесь — в письме это всё отобразится, но только без внешних CSS-стилей.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Миша добрый день! А как сделать, чтобы посетители были зарегистрированы? У меня сайт открыт для комментирования любыми посетителями, ведь это же не значит, что они зарегистрировались? И если человеку будут приходить такие статьи, то сможет он как-нибудь от них отписаться?
Добрый день)
1. чтобы пользователи были зареганы - нужно добавить либо форму регистрации(куда-нибудь в виджет например), либо ссылку на стандартную форму регистрации;
2. отписаться сможет - если залогинится на сайте и в профиле своем поменяет email на ненастоящий, НО можно доработать профиль и добавить туда галочку, которая будет включать и отключать подписку :)
Эх сама не очень люблю, когда для того, чтобы оставить комментарий надо регистрироваться... Но уверена, что на "проходных" сайтах с большой посещаемостью, это очень востребовано. Может и сайт перерастет в большой...?
на крупных сайтах даже и на регистрацию ограничения бывают - по инвайтам только)
Залил этот код в файл functions.php. Так сайт вообще перестал открываться, че за фигня. Пришлось полностью заменять файл functions.php
с кодом всё ок, возможно в начале нужно было добавить что-то вроде:
<?php
Михаил, добавил данный код в функции, но реакции ноль... Может опять что-то не так делаю?
Добрый день!
Иногда письма не сразу приходят или попадают в папку спама - проверьте пожалуйста ещё раз, если нет, то видимо что-то в коде.
Да, Михаил, Вы правы, письма ушли в спам! Я конечно решил все с помощью плагина, но я учусь и хотел бы узнать, а можно как-то это исправить, отправку писем в спам?! Был бы очень признателен!
Мне вот реализация на Вашем сайте очень нравится, просто и понятно!
Иногда от хостинга зависит - попробуйте спросить у суппорта.
Спасибо:) Реализация чего? Если вы про отправку писем со свежими постами, то они у меня через feedburner.
Не, я про отправку извещений о новых комментариях! О чек боксе над кнопкой "отправить"!
А, понятно) сам делал, но вроде и крутые плагины есть.
Относительно пападания в папку спама — думаю надо либо поработать над содержимым письма, либо порешать что-то с хостингом.
Приветствую!
Подскажите пожалуйста, возможно ли оставить в Получателях письма только один адрес получателя?
Сейчас же получается, что в уведомлении о новом посте в поле "Кому" каждый подписчик видит emal'ы всех остальных подписчиков, через запятую..
Спасибо.
Привет!
Для этого нужно запустить функцию
mail()
в цикле отдельно для каждого адреса :)К сожалению не силен в php, поэтому если не сложно, скажите, куда это вставить в код. Думаю многим вашим читателям будет интересно как это осуществить:)
Ну примерно вот так:
Так гораздо лучше, благодарю:)
Добрый вечер, Михаил. я новичек в этих длах функция полезная и нужная скажите пожалуйста как туда добавить, свой банер, название поста.
спасибо.
Добрый день!
Там есть переменная
$message
— в неё всё и добавляем.Спасибо, конечно но как туда её добавить? вы немогли бы туда прописать это все. извините занаглость я полный ноль. Просто вставлял the_title() а уменя белый экран сразу.
Если полный ноль, то надо это исправлять :)
Здравствуйте. При размещении такого кода, все хорошо отправляет, но почему то по 2 одинаковых сообщения)
Большое спасибо! Работает))
Здравствуйте, Михаил! Благодарю за отличную мысль с кодом! Я изменил немного код под свои нужды, но что-то у меня никак не получается вывести анонс поста. Подскажите, что делаю не так?
Кстати, здесь я добавил обрезку статьи от WP-KAMA (https://wp-kama.ru/id_31/obrezka-teksta-zamenyaem-the-excerpt.html)
Если пишу анонс в коде от руки, то все работает, стоит добавить вывод из $post_ID ничего не выходит. Такое ощущение, что переменная $message ничего не получает из $post_ID :(
Заранее благодарю за ответ!