使用wp_mail函数时出现问题

时间:2013-12-17 作者:Strasbourg

我有一个表单,它的消息在提交时由多个输入字段组成。我将此表单作为简单的php文档使用,但当我尝试在wordpress页面中使用此表单时,它不起作用。我已经切换到wp\\u邮件功能。有人知道吗?非常感谢。

<?php
$errors = array();
$missing = array();

if (isset($_POST[\'send\'])) {
    $to = \'[email protected]\';
    $subject = \'Form\';
    $expected = array(\'name\', \'email\', \'pick_up_adress\', \'drop_off_adress\', \'phone\', \'pick_date\', \'pick_time\', \'type\');
    $required = array(\'name\', \'email\', \'pick_up_adress\', \'drop_off_adress\', \'phone\', \'pick_date\', \'pick_time\', \'type\');
    $headers = "From: Metro<[email protected]>\\r\\n";
    $headers .= \'Content-Type: text/plain; charset=utf-8\';

    if ($mailSent) {
        header(\'Location: after_form.php\');
        exit;
    }
}

// Array proccesing
$mailSent = false; 
if (!$suspect && !$missing && !$errors) {
    $message = \'\';

    foreach($expected as $item) {
        if (isset(${$item}) && !empty(${$item})) {
            $val = ${$item};
        } else {
            $val = \'Not selected\';
        }

        if (is_array($val)) {
            $val = implode(\', \', $val);
        }

        $item = str_replace(array(\'_\', \'-\'), \' \', $item);
        $message .= ucfirst($item).": $val\\r\\n\\r\\n";
    }

    $message = wordwrap($message, 70);

    // simple php doc $mailSent = mail($to, $subject, $message, $headers); 
    $mailSent = wp_mail($to, $subject, $message, $headers);

    if (!$mailSent) {
        $errors[\'mailfail\'] = true;
    }
}
?>

1 个回复
SO网友:butlerblog

有几个问题可能会导致脚本失败。

首先,你要检查$mailSent 在顶部,以便您可以重定向。然而,在这一点上,它是未定义的。如果将其移动到最后检查的位置并设置错误,则问题发生的可能性较小。事实上,我会把这些都搬到你if (!$suspect && !$missing && !$errors) { 检查

这就带来了另一个类似的问题。在哪里$suspect 来自这似乎也没有定义。如果它不应该在那里,我会把它拿出来。

这些变化如下:

$errors = array();
$missing = array();

if (isset($_POST[\'send\'])) {
    $to = \'[email protected]\';
    $subject = \'Form\';
    $expected = array(\'name\', \'email\', \'pick_up_adress\', \'drop_off_adress\', \'phone\', \'pick_date\', \'pick_time\', \'type\');
    $required = array(\'name\', \'email\', \'pick_up_adress\', \'drop_off_adress\', \'phone\', \'pick_date\', \'pick_time\', \'type\');
    $headers = "From: Metro<[email protected]>\\r\\n";
    $headers .= \'Content-Type: text/plain; charset=utf-8\';
}

// Array proccesing
$mailSent = false; 
if (!$missing && !$errors) {
    $message = \'\';

    foreach($expected as $item) {
        if (isset(${$item}) && !empty(${$item})) {
            $val = ${$item};
        } else {
            $val = \'Not selected\';
        }

        if (is_array($val)) {
            $val = implode(\', \', $val);
        }

        $item = str_replace(array(\'_\', \'-\'), \' \', $item);
        $message .= ucfirst($item).": $val\\r\\n\\r\\n";
    }

    $message = wordwrap($message, 70);

    // simple php doc $mailSent = mail($to, $subject, $message, $headers); 
    $mailSent = wp_mail($to, $subject, $message, $headers);
}

if ( $mailSent ) {
    header(\'Location: after_form.php\');
    exit;
} else {
    $errors[\'mailfail\'] = true;
}
最后,我倾向于将其放在动作挂钩中,而不是放在模板中。它当然可以在模板中工作,所以这取决于您,但我认为init 更便于携带。

结束

相关推荐