I have two custom fields on a custom post type, each of which have the media uploader attached to a button beside them following the examples on http://www.webmaster-source.com/2010/01/08/using-the-wordpress-uploader-in-your-plugin-or-theme/ and http://www.theenglishguy.co.uk/2010/01/24/multiple-media-uploads-in-wordpress-functions-php/
What I am trying to do is on wp_insert_post:
- Detect if the first field (primary) has a value
- If so, AND the second field (secondary) is blank
- Create a new file that is a generated .pdf
I can create the .pdf outside of WP, but am struggling how to get it to upload and attachment details into WP. The examples I've looked at (http://goldenapplesdesign.com/2010/07/03/front-end-file-uploads-in-wordpress/ or http://codex.wordpress.org/Function_Reference/wp_insert_attachment seem like it's not a super hard thing to do, but the best I can get is to create the attachment based on a filename and the file itself is not actually uploaded.
Here's the code I have so far which add / edit custom fields on a custom post via the wp_insert_post action and detect the scenario I described above.
// When a post is inserted or updated
function wp_insert_post($post_id, $post = null)
{
// don't run this for quickedit
if ( defined('DOING_AJAX') )
return;
if ($post->post_type == "example")
{
// Loop through the POST data
foreach ($this->meta_fields as $key)
{
$value = @$_POST[$key];
if (empty($value))
{
delete_post_meta($post_id, $key);
continue;
}
if ($key == 'primary') {
if ($value != '') {
$secondaryValue = @$_POST["secondary"];
if (!$secondaryValue ) {
//$value = "Create New Secondary File";
$filename = $value . ".pdf";
$wp_filetype = wp_check_filetype(basename($filename), null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $filename, $post_id );
// you must first include the image.php file
// for the function wp_generate_attachment_metadata() to work
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );
} else {
$value = "No Secondary File required.";
}
}
}
// If value is a string it should be unique
if (!is_array($value))
{
// Update meta
if (!update_post_meta($post_id, $key, $value))
{
// Or add the meta data
add_post_meta($post_id, $key, $value);
}
}
else
{
// If passed along is an array, we should remove all previous data
delete_post_meta($post_id, $key);
// Loop through the array adding new values to the post meta as different entries with the same name
foreach ($value as $entry)
add_post_meta($post_id, $key, $entry);
}
}
}
}