Я хочу загрузить изображение через пользовательскую форму контакта и отправить данные через rest api, чтобы создать новый пост в моем CPT, который имеет это изображение в качестве избранного изображения, это изображение также должно быть в пользовательском каталоге на сайте, пока я удалось получить часть о создании каталога, размещении изображений там, но не могу найти решение для его работы с остальными API, я могу заставить его работать, когда у меня есть $ _POST на странице.
Это мой page-template.blade. php
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') {
require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );
$files = $_FILES["profilepicture"];
foreach ($files['name'] as $key => $value) {
if ($files['name'][$key]) {
$file = array(
'name' => $files['name'][$key],
'type' => $files['type'][$key],
'tmp_name' => $files['tmp_name'][$key],
'error' => $files['error'][$key],
'size' => $files['size'][$key]
);
$_FILES = array("upload_file" => $file);
$attachment_id = media_handle_upload("upload_file", 0);
}
}
} ?>
<form method="POST" autocomplete="off" action="" id="testemonial_form" enctype="multipart/form-data">
<label>
<input type="file" name="profilepicture[]" id="profilepicture" size="25" multiple="multiple" />
<?php
$at = wp_get_attachment_image($attachment_id,array(200,200));
$at_url = wp_get_attachment_image_src( $attachment_id, 'comment_image' );
?>
<input type="hidden" id="testemonial_image" name="testemonial_image" value="<?php echo $at_url[0] ?>">
</label>
<label>
<input name="testemonial_title" type="text" id="testemonial_title"
placeholder="<?php _e('Ime i prezime', 'lucha') ?>">
</label>
<label>
<input name="testemonial_position" type="text" id="testemonial_position"
placeholder="<?php _e('Zanimanje', 'lucha') ?>">
</label>
<label>
<textarea name="testemonial_content" id="testemonial_content" cols="30" rows="10"
placeholder="<?php _e('Vaše iskustvo sa Lucha T8 uređajem', 'lucha') ?>"></textarea>
</label>
<button class="btn-green testemonial-submit" type="submit">Submit</button>
<div class="message"></div>
</form>
и это функции. php
function testemonial_form($request)
{
$posts_data = [];
$name = $request->get_param('name');
$position = $request->get_param('position');
$description = $request->get_param('description');
$image = $request->get_param('image');
$msg = '';
$post_id = wp_insert_post(array(
'post_type' => 'testemonials',
'post_title' => $name,
'post_content' => $description,
'post_status' => 'draft',
));
update_field('position', $position, $post_id);
update_field('image',$image,$post_id);
$posts_data[] = (object)[
'name' => $name,
'position' => $position,
'description' => $description,
'image' => $image,
'msg' => $msg,
];
return $posts_data;
}
js код здесь:
/* eslint-disable */
window.addEventListener('load', () => {
let btn = document.querySelector('.testemonial-submit');
$('#testemonial_form').submit(function (e) {
e.preventDefault();
let name = $('#testemonial_title').attr('value');
let position = $('#testemonial_position').attr('value');
let description = $('#testemonial_content').attr('value');
let image = $('#profilepicture').val();
$.ajax({
beforeSend: function (request) {
btn.classList.add('loading');
},
url: '/wp-json/form/add-testemonial',
type: 'POST',
data: {
name: name,
position: position,
description: description,
image: image,
},
success: function (data) {
if (data) {
for (var i = 0; i < data.length; i++) {
console.log(data);
}
} else {
btn.classList.add('loading');
}
btn.classList.remove('loading');
}
});
});
});
TLDR: я не могу вывести файл на маршрут покоя, так как он сгенерирован после отправки ($ _FILES или $ _POST), поэтому я не могу заполнить временное имя et c, чтобы загрузить его.