n-wp.ru — блог о WordPress

Отправка писем пользователями прямо с сайта

У меня сайт «доска объявлений».
Внизу каждого объявления нужно создать два поля: текст обращения по объявлению и e-mail отправителя (либо брать адрес из его учетной записи). При нажатии кнопки «Отправить» письмо уходит автору объявления (свой e-mail авторы оставляют при создании объяв).
Как это можно реализовать?

Казалось бы, тривиальная задача. Но googling и яндексирование ответов не дали. Поиск по профильным сайтам тоже не помог. Может, не то ищу?

19 комментариев

  • Я использую кнопку отправки письма автору поста на этом сайте (да и на других). Код примерно такой:

    Вставляется в 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? Если так, то просто замените третью строчку на

                • Да, логика регистраций именно такая. Сначала хотел всех регистрировать и брать оплату за размещение объявлений. Но потом понял, что на сайте в первую очередь нужен контент. И чем меньше кликов на пути его создания, тем больше контента. А вот за использование контента можно уже и деньги брать.

            • Работает! Чисто, красиво, быстро! Аж загляденье!

              А как научить код отправлять каждое сообщение с сайта еще и мне на почту? Надо же знать, что люди людям пишут))

              • В таком случае третья строка должна выглядеть так:

                Если позволите, замечу, что, на мой взгляд, подглядывать — не очень этично =) Но если бы мне очень-очень сильно хотелось читать, что пишут автору объявления, я бы обязательно указал, что «Копия вашего сообщения будет отправлена администратору сайта». Впрочем, это остается на ваше усмотрение, разумеется.

                • Хм… пожалуй, Вы правы. Это излишнее любопытство, которое сложно честно оправдать каким-то полезным результатом. Раньше не задумывался об этом.

                • Здравствуйте!
                  Вы даже не представляете как выручили!
                  А не могли бы Вы подсказать, как в статье, рядом с формой вывести счетчик её отправки.
                  Если это конечно возможно.
                  Спасибо.

  • Очень сырая форма, юзать в данном виде не рекомендуется!

    Нет проверки на пустую строку,
    Я бы добавил ещё

    и проверку на количество сообщений у пользователя (!= ‘0’)

    Ну и интервал между отправками писем добавить для полноты реализации.

    И форма работает не только в цикле. Так как инфа из get_the_author_meta, а в цикле из формы нужна только get_permalink();

    Да и юзать форму лучше в виде функции.

  • Добрый день! код полезный,спасибо!
    Скажите пожалуйста, а как сделать так, чтобы поле для ввода сообщения не сразу было видно, а только после того, как я нажму на отельную кнопку «Написать сообщение автору», после этого должна выплывать эта форма для ввода сообщения?