Golden Apples Design (私の知る限りでは)WP.Aや他の多くの人々が推奨するメディアアップロード機能を作成しました。しかし、私がStackExchangeで見つけることができるすべてのQ&Aは全く新しい投稿を作成することを扱います。
フロントエンドからメディアをアップロードして現在の投稿に添付し、適切なサムネイルを生成してから[ギャラリー]に新しい画像を表示するページを更新するには、これ(または別のスニペット)を使用する最も良い方法は何ですか?
これがThanのコードです。
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;
ページテンプレートヘッダーに...
// 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.
}
}
使用したアップロードフォーム...
<form method="post" action="#" enctype="multipart/form-data" >
<input type="file" name="an_uploaded_attachment">
<input type="file" name="another_uploaded_attachment">
<input type="file" name="yet_another_uploaded_attachment">
<input type="submit">
<form>
@AboSamiは実際に この質問に回答しました /私の検索の勤勉さに現れていなかった古い記事の中に。彼が実際に何か他のものを探している間、彼の例のコードはとてもうまくいきました。
これがスクリプトです。
<?php $post_id = $post->ID;
if ( isset( $_POST['html-upload'] ) && !empty( $_FILES ) ) {
require_once(ABSPATH . 'wp-admin/includes/admin.php');
$id = media_handle_upload('async-upload', $post_id); //post id of Client Files page
unset($_FILES);
if ( is_wp_error($id) ) {
$errors['upload_error'] = $id;
$id = false;
}
if ($errors) {
echo "<p>There was an error uploading your file.</p>";
} else {
echo "<p>Your file has been uploaded.</p>";
}
}
?>
<form id="file-form" enctype="multipart/form-data" action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="POST">
<p id="async-upload-wrap"><label for="async-upload">upload</label>
<input type="file" id="async-upload" name="async-upload"> <input type="submit" value="Upload" name="html-upload"></p>
<p><input type="hidden" name="post_id" id="post_id" value="<?php echo $post_id ?>" />
<?php wp_nonce_field('client-file-upload'); ?>
<input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" /></p>
<p><input type="submit" value="Save all changes" name="save" style="display: none;"></p>
</form>
ヘッダの$post_id
を$post->ID
に変更します。
// 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.
}
}