-
-
Save saltnpixels/1056f39b97c1d19ee18f8e30fbdada6d to your computer and use it in GitHub Desktop.
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; | |
} |
Worked Beautifully! Thank you, thank you, thank you!
Quick question... how do we assign the new image URL (from the media gallery) to the custom field. Currently, the upload works great, but the custom field is still pointing to the gravity forms upload directory and not the Media Gallery upload directory. See screenshot here: http://b3.ms/P5Z9ZD6gKnlb
Would like to update it to the URL of the uploaded photo after this function has placed it into the WP Media Gallery: http://idahoforests.local/wp-content/uploads/forest-photo-driggs5.jpg
Hello! A noob question. Where do i put this php file in order for this to work :)?. Or just copy this into theme's functions.php?
Many thanks for your help.
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?
Thank you @saltnpixels!
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?
Here are a couple of notes for any folks finding this!
gform_after_create_post
doesn't seem to work with a custom post type. I figured out that using gform_advancedpostcreation_post_after_creation
does the trick!
Also, it seems to only work with images and only multiple files at a time. I made some tweaks and integrated a file uploader that works with more file types here: https://gist.github.com/RadGH/966f8c756c5e142a5f489e86e751eacb
Here's my end result for getting pdf/images/other files working for single file upload:
add_action('gform_advancedpostcreation_post_after_creation', 'gf_add_to_media_library', 10, 4);
/**
* 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, $feed, $entry, $form)
{
foreach ($form['fields'] as $field) {
//if its a custom field with input type file upload.
if ($field['type'] == 'post_custom_field' && $field['inputType'] == 'fileupload') {
$entry_id = $field['id'];
$file = rgar($entry, $entry_id); //provides the url of the file
$custom_field = $field['postCustomFieldName']; //custom field key
//if file field is not empty or not []
if ($file !== '' && $file !== "[]") {
$new_url = stripslashes($file);
$attachment_id = rs_upload_from_url($new_url);
//saving the image to field or thumbnail
if (isset($attachment_id)) {
update_post_meta($post_id, $custom_field, $attachment_id);
}
} //end if files not empty
} //end if custom field of uploadfile
}
} //end for each form field
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?
I did this too, but turns out postCustomFieldName needs to stay unchanged. It's the field key that is connected to your custom field name.
How it could be used in the user registration form? I'm not be able to make it work with users