Загрузка изображения через пользовательскую форму (rest api) - Wordpress - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу загрузить изображение через пользовательскую форму контакта и отправить данные через 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, чтобы загрузить его.

...