Учим WordPress отправлять почту автору поста из контактной формы

Учим WordPress отправлять почту автору поста из контактной формы

6993
4
ПОДЕЛИТЬСЯ
Для отправки сообщений с сайта существует множество плагинов контактных форм, практически под любые нужды, с любой степенью сложности. Но почти все они обладают существенным, на мой взгляд, недостатком — не умеют отправлять почту автору записи. Комментарий — пожалуйста, письмо админу — запросто. А если у вас сайт с несколькими авторами? Вот тут то и начинаются — проблемы. Особенно если вы не профессиональный программист. Из множества плагинов контактных форм, лично мне импонирует SimpleModal Contact Form. Легкий, простой, поддерживающий ajax и jQuery.

Итак, учим SimpleModal Contact Form отправлять письма автору поста прямо с сайта.
Установка обычная, и думаю описывать ее не имеет смысла.
Первым делом, исправим небольшую ошибку в коде плагина, которая не позволяет локализировать плагин. Файлы локализации, *.mo и *.po не подхватываются плагином.
Локализацию берем тут http://smcf.googlecode.com/files/smcf-ru_ru.zip
Кладем файлики в \wp-content\plugins\simplemodal-contact-form-smcf\lang\
В корне плагина \wp-content\plugins\simplemodal-contact-form-smcf открываем файл smcf.php
Ищем в самом начале такие строки:

function init() {
	load_plugin_textdomain("smcf", false, SMCF_DIR . "/lang/");

И заменяем этот код на:

function init() {
	load_plugin_textdomain('smcf', false, dirname( plugin_basename(__FILE__) ) . '/lang');

После этого нормально подхватываются файлы русификации.

В этом же файле smcf.php в районе 164 строки ищем функцию function footer()
В ней находим формирование НТМЛ формы

// create the contact form HTML
$output .= "<div id='smcf-content' style='display:none'>

Перед формой вставляем:

global $authordata;
$mailtoautor = $authordata->user_email;

В самом низу формы перед

</form>

вставляем:

<input type='hidden' name='mailtoautor' value='" . $mailtoautor . "'>

Для наглядности полный код формы с исправлениями:

	global $authordata;
	$mailtoautor = $authordata->user_email;		
		// create the contact form HTML
		$output .= "<div id='smcf-content' style='display:none'>
	<div class='smcf-top'></div>
	<div class='smcf-content'>
		<h1 class='smcf-title'>" . $title . "</h1>
		<div class='smcf-loading' style='display:none'></div>
		<div class='smcf-message' style='display:none'></div>
		<form action='" . $url["path"] . "/smcf_data.php' style='display:none'>
			<label for='smcf-name'>*" . __("Name", "smcf") . ":</label>
			<input type='text' id='smcf-name' class='smcf-input' name='name' value='' tabindex='1001' />
			<label for='smcf-email'>*" . __("Email", "smcf") . ":</label>
			<input type='text' id='smcf-email' class='smcf-input' name='email' value='' tabindex='1002' />";

		if (get_option("smcf_form_subject") == 1) {
			$output .= "<label for='smcf-subject'>" . __("Subject", "smcf") . ":</label>
			<input type='text' id='smcf-subject' class='smcf-input' name='subject' value='' tabindex='1003' />";
		}

		$output .= "<label for='smcf-message'>*" . __("Message", "smcf") . ":</label>
			<textarea id='smcf-message' class='smcf-input' name='message' cols='40' rows='4' tabindex='1004'></textarea><br/>";

		if (get_option("smcf_form_cc_sender") == 1) {
			$output .= "<label> </label>
			<input type='checkbox' id='smcf-cc' name='cc' value='1' tabindex='1005' /> <span class='smcf-cc'>" . __("Send me a copy", "smcf") . "</span>
			<br/>";
		}

		$output .= "<label> </label>
			<button type='submit' class='smcf-button smcf-send' tabindex='1006'>" . __("Send", "smcf") . "</button>
			<button type='submit' class='smcf-button smcf-cancel simplemodal-close' tabindex='1007'>" . __("Cancel", "smcf") . "</button>
			<input type='hidden' name='token' value='" . $this->token() . "'/>
			<input type='hidden' name='mailtoautor' value='" . $mailtoautor . "'>
		</form>

Открываем файл smcf_data.php
ищем в нем if ($action == «send»)
добавляем после этой строки код:

$mailtoautor = isset($_POST["mailtoautor"]) ? $_POST["mailtoautor"] : "";

Ищем:

// make sure the token matches
if ($token == SimpleModalContactForm::token()) {
sendEmail($name, $email, $subject, $message, $cc);

Меняем на:

// make sure the token matches
if ($token == SimpleModalContactForm::token()) {
sendEmail($name, $email, $subject, $message, $cc, $mailtoautor);

Ищем:

function sendEmail($name, $email, $subject, $message, $cc) {
	$to = get_option("smcf_to_email");

Меняем на:

function sendEmail($name, $email, $subject, $message, $cc, $mailtoautor) {
	$to = $mailtoautor;

Готово!. Вставляем куда хотим линк Письмо Автору
Наслаждаемся!

Код для вызова функции smcf() для использования в файлах темы, например в sidebar.php:

<?php if (function_exists('smcf')) : ?>
    <?php smcf(); ?>
<?php endif; ?>

P.S. Не забываем, что поскольку мы внесли исправления в код плагина, при его обновлении, все изменения будут утеряны. )

comments powered by HyperComments
Евгений
2013-07-11 16:28:54
Спасибо. Реально помогло!
Dastarhan Aktobe
2015-06-25 18:47:02
супер! получилось 911.mysity.kz
Саша
2015-07-10 04:09:59
Как реализовать форму, с записью данных из нее в файл rtf(doc) и отправки этого файла на почту?
Tkacheff.ru
Tkacheff.ru
2015-07-25 22:59:27
а собственно зачем? иногда задачу можно решить разными путями