我正在使用一个插件,允许您向x
数量的人发送电子邮件。您所要做的就是输入他们的"姓名"和"电子邮件地址"。这些条目分别命名为 friend_name[0]
& friend_email[0]
。有用于添加和删除输入字段的+
和-
按钮。$key
中的数字相对于字段数上下波动。我已经确认了报名表上的所有$keys
更改。
提交表单并通过循环处理后,所有电子邮件都会发送,但只会发送到输入的最后一封电子邮件。因此,如果我输入 5 个姓名和 5 封电子邮件,它们会发送以下数据:
姓名:约翰·多伊 1电子邮件: JohnDoe5@gmail.com
姓名:约翰·多伊2电子邮件: JohnDoe5@gmail.com
姓名:约翰·多伊3电子邮件: JohnDoe5@gmail.com
姓名:约翰·多伊4电子邮件: JohnDoe5@gmail.com
姓名:约翰·多伊 5电子邮件: JohnDoe5@gmail.com
这是循环:
function invfr_sendmail() {
$post = ( !empty( $_POST ) ) ? true : false;
if( $post ) {
$subject = invfr_get_settings( 'subject' );
$message = invfr_get_settings( 'message' );
$friends = $_POST['friend_email'];
$headers = "From:" . $_POST['user_name'] . " <" . $_POST['user_email']. ">" . "'r'n";
$errors = array();
foreach ( $friends as $key => $friend ) {
$name = stripslashes( $_POST['friend_name'][$key] );
$email = trim( $_POST['friend_email'][$key] );
// Check name
if( !$name )
$errors[] = '#friend_name-' . $key;
if( !$email )
$errors[] = '#friend_email-' . $key;
if( $email && !is_email( $email ) )
$errors[] = '#friend_email-' . $key;
}
// send email
if( !$errors ) {
foreach ( $friends as $key => $friend )
$mail = wp_mail( $email, invfr_tokens_replacement( $subject, $_POST, $key ), invfr_tokens_replacement( $message, $_POST, $key ), invfr_tokens_replacement( $headers, $_POST, $key ) );
if( $mail )
echo 'sent';
}
您的foreach ( $friends as $key => $friend )
循环每次都会重写$name
和$email
变量,因此最后它们只会有最后一个值。在错误检查后,您应该将此数据存储在数组中:
// Check name and email
$data_missing = false;
if( ! $name ) {
$errors[] = '#friend_name-' . $key;
$data_missing = true;
}
if ( ! $email || ! is_email( $email) ) {
$errors[] = '#friend_email-' . $key;
$data_missing = true;
}
if ( ! $data_missing ) {
$email_data[] = array( 'name' => $name, 'email' => $email );
}
然后,在发送邮件部分中遍历此数组:
if ( ! empty( $email_data) ) {
foreach( $email_data as $data ) {
$name = $data['name'];
$email = $data['email'];
$mail = wp_mail( .... )
}
}