wp_mail在acf / pre_save_post或acf / save_post中不起作用

时间:2019-08-18 16:19:57

标签: advanced-custom-fields acfpro

一旦用户使用了我通过acf创建的表格,我就会尝试发送一封确认电子邮件。

以下是我在插件中使用的代码,但是不知何故wp_email没有发送电子邮件。没有收到,也没有收到错误。

function my_pre_save_post( $post_id ) {

// check if this is to be a new post
if( $post_id != 'new_post' ) {

    return $post_id;

}
    // Create a new post
$post = array(
    'id' => $post_id,
    'post_status'  => 'publish',
    'post_title' => $_POST['acf']['_post_title'],
    'email' => $_POST['acf']['field_5d49dcb49a31f'],
    'bedrag' => $_POST['acf']['field_5d49dd749a321'],
    'periodiek' => $_POST['acf']['field_5d49de569a322'],
);

// // insert the post
$post_id = wp_insert_post( $post ); 

add_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );

$name = get_field('post_title', $post_id);
$email = get_field('email', $post_id);
$body_text = get_field('email_tekst', 'option');

$to = $name . ' <' . $email . '>' . "\r\n";
$headers = array('Content-Type: text/html; charset=UTF-8', 'From: Some name <info@somedomain.com> <noreply@'.$_SERVER['HTTP_HOST'].'>');
$subject = 'Bedankt voor uw donatie: ' . get_field('bedrag', $post_id) . ' ' . get_field('periodiek', $post_id);
$body = $body_text;

wp_mail($to, $subject, $body, $headers );

remove_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );

// return the new ID
return $post_id;

}
add_filter('acf/pre_save_post' , 'my_pre_save_post');

保存表单有效,因为我在后端看到数据。 但是我只是没有收到电子邮件。

为确保发送电子邮件,我正在使用插件(wp邮件smtp)。

我想念什么吗?

1 个答案:

答案 0 :(得分:0)

好的,我知道出了什么问题。

我没有使用正确的优先级。

现在使用以下代码:

function wpdocs_set_html_mail_content_type() {
    return 'text/html';
}

add_action('acf/save_post' , 'my_save_post', 15);
function my_save_post($post_id) {

    if( get_post_type($post_id) !== 'donations' ) {
        return;
    }

    add_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );

    $name = get_field('post_title', $post_id);
    $email = get_field('email', $post_id);
    $body_text = get_field('email_tekst', 'option');

    $to = $email;
    $headers = array('From: some name <some email> <noreply@'.$_SERVER['HTTP_HOST'].'>');
    $subject = 'Bedankt voor uw donatie: ' . get_field('bedrag', $post_id) . ' ' . get_field('periodiek', $post_id);
    $message = $body_text;

    wp_mail($to, $subject, $message, $headers );

    remove_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );
}

现在优先级为15,因此保存完成后运行。