I have a for loop and inside it I am uploading multiple images. Once an image is uploaded, I send an email notification to admin via wp_mail().
Things are working fine and sending email notification as well. However the issue is that notification email sending as per image count. Means if upload 1 image than one notification email if 4 than 4 notification email (as it’s in the loop). However I want notification send only once no matter either one or 10 images.
Here is my entire code:
global $wpdb, $post;
$upload_path = wp_upload_dir();
$post_id = $post->ID;
$upload_dir = $upload_path['basedir'].'/review-media/'.$post_id.'/'.get_current_user_id().'/';
$thumbnail_dir = $upload_dir.'thumbnail/';
$upload_url = $upload_path['baseurl'].'/review-media/'.$post_id.'/'.get_current_user_id().'/thumbnail/';
self::create_path($thumbnail_dir);
if (isset($_FILES['photo']) === true) {
$errors = array();
$allowed_ext = array('jpg', 'jpeg', 'png', 'gif');
$files = $_FILES['photo'];
for($x = 0; $x < count($files['name']); $x++) {
$file_name = $files['name'][$x];
$file_ext = strtolower(end(explode('.', $file_name)));
$file_size = $files['size'][$x];
$file_tmp = $files['tmp_name'][$x];
if($file_tmp)
list($img_width, $img_height) = getimagesize($file_tmp);
$min_img_width = 1;
$min_img_height = 1;
$max_img_width = 2000;
$max_img_height = 2000;
if (!$file_tmp) {
$errors[] = '<p>Please select the file</p>';
}
if (($file_tmp) && (($img_width > $max_img_width) || ($img_width < $min_img_width)) && (($img_height > $max_img_height) || ($img_height < $min_img_height))) {
$errors[] = '<p>Size of <strong>'.$file_name.'</strong> must be within '. $min_img_width .'px to '. $max_img_width .'px</p>';
}
if ( ($file_tmp) && (in_array($file_ext, $allowed_ext) === false) ) {
$errors[] = '<p>Extension <strong>'.$file_ext.'</strong> not allowed</p>';
unlink($file_tmp);
}
if ($file_size > 2097152) {
$errors[] = '<p>File <strong>'.$file_name.'</strong> size must be under 2mb</p>';
unlink($file_tmp);
}
if(empty($errors)) {
move_uploaded_file($file_tmp, $upload_dir.$file_name);
//crop and resize to images and thumbnails
$target_file = $upload_dir.$file_name; // original file
$resized_file = $upload_dir.$file_name; // max resized file
$med_file = $upload_dir.'medium-'.$file_name; // medium resized fiel
$thumbnail = $thumbnail_dir.$file_name; // thumbnail file
$large_width = 1024; // upload resize max width
$large_height = 1024; // upload resize max height
$thumb_width = 150; // thumbnail width
$thumb_height = 150; // thumbnail height
$med_width = $thumb_width * 1.5; // medium resized image width
$med_height = $thumb_height * 1.5; // medium resized image height
// resize to maximum width and height
self::resize_image($target_file, $resized_file, $large_width, $large_height, $file_ext);
// resize with 1.5 multi of thumb width and height to generate thumbnail
self::resize_image($target_file, $med_file, $med_width, $med_height, $file_ext);
// crop image uisng medium resized image
self::crop_thumbnai(file_exists($med_file) ? $med_file : $target_file, $thumbnail, $thumb_width, $thumb_height, $file_ext);
// delete medium resized file after thumbnail creation.
if (file_exists($med_file))
unlink($med_file);
self::insert_image($file_name);
//self::get_uploaded_image();
echo '<div class="upload-status-thumb">';
echo '<img src="'.$upload_url.$file_name.'" alt="imge" />';
echo '</div>';
// send notification email to admin on image upload
self::email_notification($post_id);
} else {
foreach ($errors as $error) {
echo $error;
}
}
}
}
Store your email content in one variable ($msg below) and amend the information every iteration of the loop. When the loop has finished, check if the variable has been modified, if so email its content.
This should work: