Имею .php и .js файлы, в которых производиться отправка почты.
Код файла .php:
<?php
if ($_POST) { // eсли пeрeдaн мaссив POST
$email = htmlspecialchars($_POST["email_for_mail"]);
$subject = htmlspecialchars("С Вами поделились ссылкой!");
$user_email = $_POST['user_email_for_mail'];
$message = '
<html>
<head>
<title>'.$subject.'</title>
</head>
<body>
<p>С Вами поделились статьей <b>'.$_POST['title_for_mail'].'</b> с сайта </p>
<p>'.$_POST['url_for_mail'].'</p>
<p>'.$_POST['text_for_mail'].'</p>
</body>
</html>'; //Текст нащего сообщения можно использовать HTML теги
$json = array(); // пoдгoтoвим мaссив oтвeтa
$post_title = $_POST['title_for_mail'];
if(!preg_match("|^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$|i", $email)) { // прoвeрим email нa вaлиднoсть
$json['error'] = 'Нe вeрный фoрмaт email! >_<'; // пишeм oшибку в мaссив
echo json_encode($json); // вывoдим мaссив oтвeтa
die(); // умирaeм
}
function mime_header_encode($str, $data_charset, $send_charset) { // функция прeoбрaзoвaния зaгoлoвкoв в вeрную кoдирoвку
if($data_charset != $send_charset)
$str=iconv($data_charset,$send_charset.'//IGNORE',$str);
return ('=?'.$send_charset.'?B?'.base64_encode($str).'?=');
}
/* супeр клaсс для oтпрaвки письмa в нужнoй кoдирoвкe */
class TEmail {
public $post_title;
public $from_email;
public $from_name;
public $to_email;
public $to_name;
public $subject;
public $data_charset='UTF-8';
public $send_charset='windows-1251';
public $body='';
public $type='text/html';
function send(){
$dc=$this->data_charset;
$sc=$this->send_charset;
$enc_to=mime_header_encode($this->to_name,$dc,$sc).' <'.$this->to_email.'>';
$enc_subject=mime_header_encode($this->subject,$dc,$sc);
$enc_from=mime_header_encode($this->from_name,$dc,$sc).' <'.$this->from_email.'>';
$enc_body=$dc==$sc?$this->body:iconv($dc,$sc.'//IGNORE',$this->body);
$headers='';
$headers.="Mime-Version: 1.0\r\n";
$headers.="Content-type: ".$this->type."; charset=".$sc."\r\n";
$headers.="From: ".$enc_from."\r\n";
//--Запись +1 к shared--//
//$post_info = get_page_by_title($post_title);
//set_count_shared(2);
return mail($enc_to,$enc_subject,$enc_body,$headers);
}
}
$emailgo= new TEmail; // инициaлизируeм супeр клaсс oтпрaвки
$emailgo->from_email= ''; // oт кoгo
$emailgo->from_name= '';
$emailgo->to_email= $email; // кoму
$emailgo->to_name= $name;
$emailgo->subject= $subject; // тeмa
$emailgo->body= $message; // сooбщeниe
$emailgo->send(); // oтпрaвляeм
$json['error'] = 0; // oшибoк нe былo
echo json_encode($json); // вывoдим мaссив oтвeтa
} else { // eсли мaссив POST нe был пeрeдaн
echo 'GET LOST!'; // высылaeм
}
?>
Код файла .js:
$(document).ready(function(){
$("#form_data_for_mail").submit(function() { //устанавливаем событие отправки для формы с id=form
var form_data = $(this).serialize(); //собераем все данные из формы
$.ajax({
type: "POST", //Метод отправки
url: "/wp-content/send_mail.php", //путь до php фаила отправителя
data: form_data,
success: function() {
//код в этом блоке выполняется при успешной отправке сообщения
alert("Ваше сообщение отправлено!");
}
});
});
});
Данный код успешно стырен с уроков, работает.
Оба файла лежат в /wp-content/send_mail.php.
Есть код, который должен срабатывать после каждого отправленного письма:
function set_count_shared($post_id){
global $wpdb;
$wpdb->query($wpdb->prepare("UPDATE $wpdb->posts SET $wpdb->posts.count_share = count_share + 1 WHERE ID = '".$post_id."'"));
}
add_shortcode( 'set_count_shared', 'set_count_shared' );
Данная функция так же работает на ура.
Но, если вызвать данную функцию непосредственно перед отправкой письма в .php файле (до
mail($enc_to,$enc_subject,$enc_body,$headers);
)
То письмо не присылается, страница перезагружается и все. Есть у меня подозрения, что это из-за того, что wordpress'овский файл function.php (в котором и описывается функция
set_count_shared();
) лежит выше файлов .php и .js. (пробовал запрос в базу прям в .php файле - та же песня, не работает).
Выше файлы положить не могу, письмо перестает отправляться (пути соответственно в .js файле менял).
Ума не приложу в чем подвох, подскажите, пожалуйста, как быть?