Skip to content

Instantly share code, notes, and snippets.

@saltnpixels
Last active January 18, 2024 20:32
Show Gist options
  • Save saltnpixels/1056f39b97c1d19ee18f8e30fbdada6d to your computer and use it in GitHub Desktop.
Save saltnpixels/1056f39b97c1d19ee18f8e30fbdada6d to your computer and use it in GitHub Desktop.
gravity form upload file to media library and use attachment ID in custom field
add_action( 'gform_after_create_post', 'gf_add_to_media_library', 10, 3 );
/**
* Save file upload fields under custom post field to the library
*
* @param $post_id The post identifier
* @param $entry The entry
* @param $form The form
*/
function gf_add_to_media_library ( $post_id, $entry, $form ) {
foreach($form['fields'] as $field){
//get media upload dir
$uploads = wp_upload_dir();
$uploads_dir = $uploads['path'];
$uploads_url = $uploads['url'];
//if its a custom field with input type file upload.
if( $field['type'] == 'post_custom_field' && $field['inputType'] == 'fileupload'){
$entry_id = $field['id'];
$files = rgar ( $entry, $entry_id );
$custom_field = $field['postCustomFieldName']; //custom field key
//if file field is not empty or not []
if ( $files !== '' && $files !== "[]"){
$patterns = ['[', ']', '"']; //get rid of crap
$file_entry = str_replace($patterns, '', $files);
$files = explode ( ',', $file_entry );
foreach ($files as $file) {
//each file is a url
//get the filename from end of url in match[1]
$filename = pathinfo($file, PATHINFO_FILENAME);
//add to media library
//WordPress API for image uploads.
include_once( ABSPATH . 'wp-admin/includes/image.php' );
include_once( ABSPATH . 'wp-admin/includes/file.php' );
include_once( ABSPATH . 'wp-admin/includes/media.php' );
$new_url = stripslashes($file);
$result = media_sideload_image( $new_url, $post_id, $filename, 'src');
//saving the image to field or thumbnail
if( strpos($field['cssClass'], 'thumb') === false ){
$attachment_ids[] = (int) get_attachment_id_from_src($result);
}
else{
set_post_thumbnail($post_id, (int) get_attachment_id_from_src($result) );
}
} //end foreach file
if ( isset( $attachment_ids ) ){
update_post_meta ($post_id, $custom_field, $attachment_ids);
}
} //end if files not empty
} //end if custom field of uploadfile
}
} //end for each form field
function get_attachment_id_from_src($image_src) {
global $wpdb;
$query = "SELECT ID FROM {$wpdb->posts} WHERE guid='$image_src'";
$id = $wpdb->get_var($query);
return $id;
}
@DCox44
Copy link

DCox44 commented Sep 5, 2019

Hi, I'm getting this error

Catchable fatal error: Object of class WP_Error could not be converted to string in C:\wamp64\www\Intranet\wp-content\themes\woffice\functions.php on line 152

Line 152 is the $query assignment

$query = "SELECT ID FROM '{$wpdb->posts}' WHERE guid='$image_src'";

any idea on why I'm getting this error?

@jadealombro
Copy link

Thank you @saltnpixels!

@technohack11
Copy link

I copied the code to my functions.php file and changed the "postCustomFieldName" to my custom field name "test_image_upload".
but it is not working. when I upload an image to the field, there is no image uploaded to the media library. Any one knows why?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment