wp_mail () en un bucle, solo enviando a la última dirección

Estoy usando un complemento que te permite enviar un correo electrónico a x personas. Todo lo que tienes que hacer es ingresar su “nombre” y “dirección de correo electrónico”. Estas entradas se llaman friend_name[0] y friend_email[0] respectivamente. Hay botones + y - para agregar y eliminar campos de entrada. El número en la $key sube y baja en relación con la cantidad de campos. He confirmado todas las $keys cambio en el formulario de inscripción.

Cuando el formulario se envía y se procesa a través del bucle, todos los correos electrónicos se envían, pero solo hasta el último correo electrónico ingresado. Entonces, si ingreso 5 nombres y 5 correos electrónicos, envían estos datos:

Nombre: John Doe 1 E-Mail: JohnDoe5@gmail.com

Nombre: John Doe 2 E-Mail: JohnDoe5@gmail.com

Nombre: John Doe 3 E-Mail: JohnDoe5@gmail.com

Nombre: John Doe 4 E-Mail: JohnDoe5@gmail.com

Nombre: John Doe 5 E-Mail: JohnDoe5@gmail.com

Aquí está el ciclo:

 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'] . " " . "\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'; } 

Su bucle foreach ( $friends as $key => $friend ) está reescribiendo las variables $name y $email cada vez, por lo que al final solo tendrán el último valor. Debería almacenar estos datos en una matriz después de su verificación de errores:

  // 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 ); } 

Luego, recorra esta matriz en su parte de envío de correo:

 if ( ! empty( $email_data) ) { foreach( $email_data as $data ) { $name = $data['name']; $email = $data['email']; $mail = wp_mail( .... ) } }