アップロード画像付きのフロントエンド投稿を使用しています、
私のコード
if (!function_exists('wp_generate_attachment_metadata')){
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
}
if ($_FILES) {
foreach ($_FILES as $file => $array) {
if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
return "upload error : " . $_FILES[$file]['error'];
}
$attach_id = media_handle_upload( $file, $new_post );
}
}
if ($attach_id > 0){
//and if you want to set that image as Post then use:
update_post_meta($new_post,'_thumbnail_id',$attach_id);
}
これは、このような画像を1つアップロードするのに適しています
<input type="file" id="image" name="image">
しかし、私のHTMLを
<input type="file" id="image" name="image[]" multiple="multiple" >
アップロードを停止します
誰かが私を助けてくれる?
入力ファイルtagのmultiple="multiple"
またはmultiple=""
属性はかなり新しく、クロスブラウザでは広くサポートされていませんが、それがあなたが望むやり方であれば、
これを試して:
<form ...
<input type="file" id="image" name="image[]" onchange="updateList();" multiple="multiple" >
<ul id="file_list"></ul>
</form>
<script>
function updateList(){
//get the input and UL list
var input = document.getElementById('image');
var list = document.getElementById('file_list');
//empty list for now...
while (list.hasChildNodes()) {
list.removeChild(ul.firstChild);
}
//for every file...
for (var x = 0; x < input.files.length; x++) {
//add to list
var li = document.createElement('li');
li.innerHTML = 'File ' + (x + 1) + ': ' + input.files[x].name;
list.append(li);
}
}
</script>
ファイルがアップロードされたとき、その関数を使うために配列の修正を使う必要があるので、 Golden Apples からこれらの関数を使います。
function fix_file_array(&$files) {
$names = array(
'name' => 1,
'type' => 1,
'tmp_name' => 1,
'error' => 1,
'size' => 1
);
foreach ($files as $key => $part) {
// only deal with valid keys and multiple files
$key = (string) $key;
if (isset($names[$key]) && is_array($part)) {
foreach ($part as $position => $value) {
$files[$position][$key] = $value;
}
// remove old key reference
unset($files[$key]);
}
}
}
function insert_attachment($file_handler,$post_id,$setthumb='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_sideload( $file_handler, $post_id );
if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
return $attach_id;
}
そして一度あなたがこの機能を持っているなら、あなたはこれをすることができます:
if ($_FILES) {
fix_file_array($_FILES[$name]);
foreach ($_FILES[$name] as $file => $fileitem){
$newupload = insert_attachment($fileitem,$real_post_id);
}
}
どれがうまくいくか