👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →
У меня сайт “доска объявлений”.
Внизу каждого объявления нужно создать два поля: текст обращения по объявлению и e-mail отправителя (либо брать адрес из его учетной записи). При нажатии кнопки “Отправить” письмо уходит автору объявления (свой e-mail авторы оставляют при создании объяв).
Как это можно реализовать?
Казалось бы, тривиальная задача. Но googling и яндексирование ответов не дали. Поиск по профильным сайтам тоже не помог. Может, не то ищу?
Я использую кнопку отправки письма автору поста на этом сайте (да и на других). Код примерно такой:
Вставляется в single.php, желательно внутрь цикла вывода содержимого поста.
Все верно. Так же поступил сначала и я. Однако, выяснилось, что не у всех пользователей корректно или вообще как-то настроен на компьютере почтовик по умолчанию. Поэтому не всегда ссылка “mailto:” обрабатывается корректно.
Вот поэтому мне нужно сделать так, чтобы тело письма отправитель писал прямо у меня на сайте. А по кнопке “Отправить” мой сайт отправлял бы это тело по адресу автора объявления.
Я встречал один способ создания формы обратной связи с автором поста тут. Но способ муторный и мне не понравился. Есть не совсем понятный перевод этой статьи на русский тут, но доля муторности и непонятности в нем такая же, как и в оригинале.
Гораздо проще использовать какую-нибудь уже готовую контактную форму, передавая в нее аргументы текущего поста. Например, есть замечательный плагин для создания контактных форм Contact Form 7, и для него придумали передавать аргумент sendto.
Да что там – ведь есть уже готовое решение: плагин Send E-mail. Он по умолчанию отправляет письмо автору поста, в который вставлена контактная форма.
Плагин Send E-Mail не подойдет, т.к. мыло автора объявления у меня находится в произвольном поле. Объявления могут создавать и незарегистрированные пользователи.
Буду пробовать Contact Form 7 с указанным хаком.
Не нужно никаких хаков. Вам же нужна простейшая вещь – форма из одного поля и одной кнопки. Зачем использовать какой-то тяжелый плагин для этого? Следующий код я не тестировал, но он должен работать. Вставьте его в луп в том месте, где хотите, чтобы отображалась форма. Я так понял, что сообщения должны иметь возможность отправлять только зарегистрированные пользователи, поэтому никакой дополнительной защиты от спама не предусмотрено. Пожелания по доработке приветствуются =)
Быстрофикс:
Вместо the_title() и the_permalink() нужно использовать get_the_title() и get_the_permalink() в пятой и шестой строках соотвественно.
Перепроверил и протестировал код. Теперь всё точно работает. Вставляйте в loop.
Отлично. А теперь нужно научить этот код брать мыло адресата не из user_email, а из произвольного поля wtf_comail. Авторы объявлений не регистрируются у меня на сайте.
Т.е. для того, чтобы отправить объявление, регистрация не нужна, а чтобы ответить на него – нужна?
Если я правильно понял, адрес автора объявления хранится в custom field wtf_comail? Если так, то просто замените третью строчку на
Да, логика регистраций именно такая. Сначала хотел всех регистрировать и брать оплату за размещение объявлений. Но потом понял, что на сайте в первую очередь нужен контент. И чем меньше кликов на пути его создания, тем больше контента. А вот за использование контента можно уже и деньги брать.
Работает! Чисто, красиво, быстро! Аж загляденье!
А как научить код отправлять каждое сообщение с сайта еще и мне на почту? Надо же знать, что люди людям пишут))
В таком случае третья строка должна выглядеть так:
Если позволите, замечу, что, на мой взгляд, подглядывать – не очень этично =) Но если бы мне очень-очень сильно хотелось читать, что пишут автору объявления, я бы обязательно указал, что “Копия вашего сообщения будет отправлена администратору сайта”. Впрочем, это остается на ваше усмотрение, разумеется.
Хм… пожалуй, Вы правы. Это излишнее любопытство, которое сложно честно оправдать каким-то полезным результатом. Раньше не задумывался об этом.
Здравствуйте!
Вы даже не представляете как выручили!
А не могли бы Вы подсказать, как в статье, рядом с формой вывести счетчик её отправки.
Если это конечно возможно.
Спасибо.
Кстати, хорошая мысль – форма обратной связи с автором. Нужно реализовать ее на n-wp.ru.
Форма обратной связи с автором, + его последние посты и Био и граватаром — http://tkacheff.ru/697/plugins-author-metabox/
Очень сырая форма, юзать в данном виде не рекомендуется!
Нет проверки на пустую строку,
Я бы добавил ещё
и проверку на количество сообщений у пользователя (!= ‘0’)
Ну и интервал между отправками писем добавить для полноты реализации.
И форма работает не только в цикле. Так как инфа из get_the_author_meta, а в цикле из формы нужна только get_permalink();
Да и юзать форму лучше в виде функции.
Добрый день! код полезный,спасибо!
Скажите пожалуйста, а как сделать так, чтобы поле для ввода сообщения не сразу было видно, а только после того, как я нажму на отельную кнопку “Написать сообщение автору”, после этого должна выплывать эта форма для ввода сообщения?
Посмотрите ответы на вопрос о модальном окне – https://n-wp.ru/11391