2015-09-22 7 views
0

Я пытаюсь создать форму отзыва и страницу со списком в Wordpress, и у меня возникли проблемы с отправкой электронной почты автору отзыва, уведомляющему его о публикации его публикации ,Отправляйте письмо с уведомлением при публикации публикации в Wordpress

После того, как форма подтверждена и обработана, она автоматически создает ожидающий пост с wp_insert_post(), а данные формы хранятся в текстовых вводах, генерируемых плагином Advanced Custom Fields. Когда я нажимаю кнопку публикации, он должен отправить электронное письмо с уведомлением автору. Вот функция, я писал:

function publish_post_notification($post_id){ 

    $author = get_field('author_email', $post_id); // get author email from custom fields 

    if(isset($author)){ 
    require_once('testimoniale/mail-config.php'); // PHPMailer config 
    $mail->addAddress($author); // Add a recipient 
    $mail->Subject = 'Your testimonial has been published !'; 

    ob_start(); 
    include('testimoniale/mail_template/notification-template.php'); 
    $mail->Body = ob_get_contents(); 

    $mail->AltBody = 'Your testimonial has been published !'; // Alternative text for non-html mail clients 

    if(!$mail->send()) { 
     echo 'Message could not be sent.'; 
     echo 'Mailer Error: ' . $mail->ErrorInfo; 
    } else { 
     echo 'Message has been sent'; 
    } 
    ob_end_clean(); 
} 

add_action('publish_post','publish_post_notification',10,1); 

Проблема заключается в том, когда я публикую пост в первый раз, он не посылает по электронной почте, но это, если я, например, изменить статус сообщения впоследствии Ожидание и публикация его снова или если я обновляю сообщение.

Я попытался с помощью save_post крючок, но он срабатывает, когда пост изначально создается с помощью wp_insert_post(), а также и по какой-то причине transition_post_status, pending_to_publish и post_updated не работает для меня тоже.

Любые предложения?

Заранее спасибо

+0

использовать сохранить пост крюк и проверить статус сообщения в пределах function.You можно установить после мета для предотвращения дальнейших писем. – David

+0

Не могли бы вы привести мне пример? Как я могу проверить, создается ли пост, чтобы крюк не срабатывал тогда? –

+0

попробуйте сами, вы можете использовать 'get_post', чтобы вытащить сообщение, а затем использовать' update_post_meta() 'для сохранения пользовательских данных. – David

ответ

2

я узнал, что случилось с моей кодой: get_field() функции от Advanced пользовательских полей не возвращает значение поля автора на первый посте опубликовать, следовательно, условие if(isset($author)) возвращается ложью.

Я изменил $author = get_field('author_email', $post_id); к $author = get_post_meta($post_id, 'author_email', true); и теперь он работает

+0

Вы имеете в виду «author_email» вместо «email_pacient», правильно? – rjpedrosa

+0

Вы правы, вероятно, забыл изменить имя при копировании кода. Я пытался перевести имена переменных перед публикацией. Теперь это изменилось. –

Смежные вопросы