私はすべての面倒な作業を行うためにblueimp jQuery-File-Uploaderを使用するフロントエンドのアップロードフォームを使って作業しています...でる。
更新/マイコード
HTML(フロントエンドフォーム):
<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(Basic Plusデモファイルで使われているのと同じjsを使っています)url変数をUploadHandler.phpファイルの場所に変更するだけです。
PHP(私のアップロードスクリプトの相対部分...私はデフォルトの UploadHandlerスクリプトを使用しています そして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;
}
更新された問題:
最初はこれでうまくいくようですが、wp_posts database table
を確認しても何も追加されていません。また、media library
を見ると、アップロードされた画像のみが表示され(他の画像はデータベースにありません)、次のエラーが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
私が呼んでいる変数は文字列ではなくオブジェクトであるという事実は理解できますが、その場所に何を入れるべきかわからないのです。
どんな助けでも私が考えることができるすべてを試みたことを認められています。できるだけ早くこれを起動して実行する必要があります。ありがとう
テストをして友人と仕事をした後、私は解決策を見つけることができました:
関数get_full_url
がURLを取得する方法を変更するだけです。
// Go to 'protected function get_full_url()'
// Line 200 (approx. if you've made the same changes stated above) in UploadHandler.php
// change this line, should be the last one in the function
substr($_SERVER['SCRIPT_NAME'],0, strrpos($_SERVER['SCRIPT_NAME'], '/'));
// After editing this is what you should end with
substr($_SERVER['DOCUMENT_ROOT'],0, strrpos($_SERVER['DOCUMENT_ROOT'], '/'));
これは私にとって(質問からのカスタマイズされたコードと一緒に)働いたもので、カスタムWordPressページでデモアップローダーを使うことを可能にしました。フロントエンドのアップロードフォームを作成するこれが誰かに役立つことを願っています。