My function lets users delete their uploaded images in the front-end. However, they're only deleted in the Media Library. That means that they're still in wp-content/uploads/.
public static function removePhoto($ID, $attachment) {
if(isset(self::$data['user']['photos'][$attachment])) {
unset(self::$data['user']['photos'][$attachment]);
wp_delete_attachment($attachment);
core:updateUserMeta($ID, 'photos', self::$data['user']['photos']);
}
}
This is how how the images are added:
public static function uploadImage($file) {
require_once(ABSPATH.'wp-admin/includes/image.php');
$attachment=array('ID' => 0);
if(JBSUser::$data['user']['membership']['photos']<=0) {
JBSInterface::$messages[]=__('You have exceeded the number of photos', 'epic');
return $file;
}
if(!empty($file['name'])) {
$uploads=wp_upload_dir();
$filetype=wp_check_filetype($file['name'], null);
$filename=wp_unique_filename($uploads['path'], 'image-1.'.$filetype['ext']);
$filepath=$uploads['path'].'/'.$filename;
//validate file
if (!in_array($filetype['ext'], array('jpg', 'JPG', 'jpeg', 'JPEG', 'png', 'PNG'))) {
JBSInterface::$messages[]=__('Only JPG and PNG images are allowed.', 'epic');
} else if(move_uploaded_file($file['tmp_name'], $filepath)) {
//upload image
$attachment=array(
'guid' => $uploads['url'].'/'.$filename,
'post_mime_type' => $filetype['type'],
'post_title' => sanitize_title(current(explode('.', $filename))),
'post_content' => '',
'post_status' => 'inherit',
'post_author' => get_current_user_id(),
);
//add image
$attachment['ID']=wp_insert_attachment($attachment, $attachment['guid'], 0);
update_post_meta($attachment['ID'], '_wp_attached_file', substr($uploads['subdir'], 1).'/'.$filename);
//add thumbnails
$metadata=wp_generate_attachment_metadata($attachment['ID'], $filepath);
wp_update_attachment_metadata($attachment['ID'], $metadata);
} else {
JBSInterface::$messages[]=__('This image is too large for uploading.','epic');
}
}
return $attachment;
}
Update: Setting wp_delete_attachment
, true
- does not work.
I'm suspicious of: substr($uploads['subdir'], 1).'/'.$filename);
Which seems to upload the files to subfolder. But the images are still uploaded to the wp-content/uploads/ regardless if the "organize" setting is on or off.
Should this really effect the wp_delete_attachment?
media_handle_upload
though (after sanitization) - which basically callswp_handle_upload
inside