Last active
September 17, 2024 20:43
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.