I'm working with a frontend upload form that uses blueimp jQuery-File-Uploader to do all the heavy lifting ... but, after attempting to add the necessary WordPress functionality to blueimp I started running into some errors that I am unable to figure out.
Update / My code
HTML (the frontend form):
<form id="fileupload" action="" method="POST" enctype="multipart/form-data">
<span class="btn btn-success fileinput-button">
<span>Add files...</span>
<!-- The file input field used as target for the file upload widget -->
<input type="file" name="files[]" multiple />
</span>
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
</form>
JS (I'm using the same js that is used in the Basic Plus demo file) Just changing the url variable to the location of the UploadHandler.php file
PHP (relative parts of my upload script ... I'm using the default UploadHandler script and trying to customize it for WordPress)
// Required WordPress files and hooks
require_once( $_SERVER['DOCUMENT_ROOT'] . "/wp-load.php" );
require_once( $_SERVER['DOCUMENT_ROOT'] . "/wp-admin/includes/media.php" );
require_once( $_SERVER['DOCUMENT_ROOT'] . "/wp-admin/includes/file.php" );
require_once( $_SERVER['DOCUMENT_ROOT'] . "/wp-admin/includes/image.php" );
$upload_dir = wp_upload_dir();
global $current_user;
get_currentuserinfo();
$logged_in_user = $current_user->ID;
// Some default blueimp code
// First few lines of the __construct function
global $upload_dir;
$this->options = array(
'script_url' => $this->get_full_url(),
'upload_dir' => $upload_dir['path'] . '/',
'upload_url' => $upload_dir['url'] . '/',
// A lot more default script code
// The handle_file_upload function with WordPress customizations
protected function handle_file_upload($uploaded_file, $name, $size, $type, $error,
$index = null, $content_range = null) {
global $logged_in_user;
$file = new stdClass();
$file->name = $this->get_file_name($uploaded_file, $name, $size, $type, $error,
$index, $content_range);
$file->size = $this->fix_integer_overflow(intval($size));
$file->type = $type;
if ($this->validate($uploaded_file, $file, $error, $index)) {
$this->handle_form_data($file, $index);
$upload_dir = $this->get_upload_path();
if (!is_dir($upload_dir)) {
mkdir($upload_dir, $this->options['mkdir_mode'], true);
}
$file_path = $this->get_upload_path($file->name);
$append_file = $content_range && is_file($file_path) &&
$file->size > $this->get_file_size($file_path);
if ($uploaded_file && is_uploaded_file($uploaded_file)) {
// multipart/formdata uploads (POST method uploads)
if ($append_file) {
file_put_contents(
$file_path,
fopen($uploaded_file, 'r'),
FILE_APPEND
);
} else {
move_uploaded_file($uploaded_file, $file_path);
}
} else {
// Non-multipart uploads (PUT method support)
file_put_contents(
$file_path,
fopen('php://input', 'r'),
$append_file ? FILE_APPEND : 0
);
}
$file_size = $this->get_file_size($file_path, $append_file);
if ($file_size === $file->size) {
$file->url = $this->get_download_url($file->name);
if ($this->is_valid_image_file($file_path)) {
$this->handle_image_file($file_path, $file);
}
} else {
$file->size = $file_size;
if (!$content_range && $this->options['discard_aborted_uploads']) {
unlink($file_path);
$file->error = $this->get_error_message('abort');
}
}
$this->set_additional_file_properties($file);
}
$attachment = array(
'post_mime_type' => $file->type,
'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $file_path )),
'post_content' => '',
'post_author' => $logged_in_user,
'post_status' => 'inherit',
'post_type' => 'attachment',
'guid' => $this->options['upload_url'] . $name
);
$attachment_id = wp_insert_attachment( $attachment, $file_path );
// Generate the attachment data
$attachment_data = wp_generate_attachment_metadata( $attachment_id, $file_path );
// Update the attachment metadata
wp_update_attachment_metadata( $attachment_id, $attachment_data );
return $file;
}
Updated Issue:
At first this seems to work ... but, when you check the wp_posts database table
nothing has been added. Also, when looking in the media library
it only shows the uploaded image (none of the other images, which are in the database) and the following errors appear in the error_log
:
PHP Warning: strpos() expects parameter 1 to be string, object given in /Applications/MAMP/htdocs/wordpress/wp-includes/post.php on line 188 PHP Warning: preg_match() expects parameter 2 to be string, object given in /Applications/MAMP/htdocs/wordpress/wp-includes/post.php on line 188 PHP Catchable fatal error: Object of class stdClass could not be converted to string in /Applications/MAMP/htdocs/wordpress/wp-includes/post.php on line 189
I understand the fact that the variable that I'm calling is an object, not a string, but I'm unsure what to put in it's place.
Any help is appreciated have tried everything I can think of. Really need to get this up and running ASAP! Thanks