Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

i'm probably breaking a few common sense rules here.

is there a way to utilize wordpress' bake in attachment file handling for an upload form within a theme template? yes, the front end -- i know.

i’m creating a memorial site and i want people to be able to leave textual photographic "comments" for a dear person our community has lost.

but these aren't wordpress users. they're aunts and kids and everything in between.

these people are not going to be able to figure out WP default media UI and i don't want them having to log in and futz around. too confusing for them. if this weren't such a specific and delicate project, i wouldn't be trying to bend the rules so much.

i understand that i'm opening up security holes by allowing anyone to upload a file, but i think it's somewhat necessary. all uploaded attachments will be "pending." i have both the text and photos set a custom post type, not as comments, so that i can utilize some built in post data.

and it would be great if i could utilize worpdress built in file checking, handling, naming, size... etc. even though the file handling is on the front end.

i thought that perhaps i could use: wp_handle_upload()

by including '../wp-admin/includes/file.php'

but that didn't work. i get a fatal error when i try to include it. is it just TOTALLY against the rules to include admin includes within templates... probably.

i could just do all the file handling myself, but thought perhaps there's a way to utilize wordpress' functionality and that it may be safer.

or are there suggestions on another route i should be going on altogether?

unfortunately this is pretty time sensitive... the memorial service is coming up in a few days.

thank you so much

jonah

share|improve this question
add comment

1 Answer 1

up vote 7 down vote accepted

here is the function i use whenever i accept uploads from front end and you can use it in your template files:

function insert_attachment($file_handler,$post_id,$setthumb='false') {

  // check to make sure its a successful upload
  if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false();

  require_once(ABSPATH . "wp-admin" . '/includes/image.php');
  require_once(ABSPATH . "wp-admin" . '/includes/file.php');
  require_once(ABSPATH . "wp-admin" . '/includes/media.php');

  $attach_id = media_handle_upload( $file_handler, $post_id );

  if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
  return $attach_id;
}

Usage:

// set $post_id to the id of the post you want to attach
// these uploads to (or 'null' to just handle the uploads
// without attaching to a post)

if ($_FILES) {
  foreach ($_FILES as $file => $array) {
    $newupload = insert_attachment($file,$post_id);
    // $newupload returns the attachment id of the file that
    // was just uploaded. Do whatever you want with that now.
  }
}
share|improve this answer
    
Awesome. Thanks so much Bainternet. Working great. Out of curiosity, did you fiddle with which includes to use, and what order until it worked, or did you find that magic somewhere:) –  Jonah Goldstein Mar 1 '11 at 2:26
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.