有几个问题可能会导致脚本失败。
首先,你要检查$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
更便于携带。