-
-
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; | |
} |
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.
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.