【问题标题】:Custom feature image upload from front end only uploads folder name从前端上传自定义特征图像仅上传文件夹名称
【发布时间】:2017-11-02 16:15:36
【问题描述】:

感谢您查看我的问题。

问题

我需要能够上传与帖子相关联的特征图像(缩略图),正在处理的网站能够从网站的前端发布帖子。

已实现自定义代码

在提交后的表单中,我使用了文件类型的输入元素:

<form class="compose-post-form" method="POST" enctype="multipart/form-data">

  ...

 <input type="file" name="featured" id="featured">

 ...


</form>

使用 jQuery AJAX 在表单提交时将数据发送到后端:

$.ajax({
  type: 'post',
  url: t_ajax_url.ajax_url,
  data: $this.serialize() + "&tri_post_content="+article_content+"&article="+article,
  beforeSend: function () {
    is_sending = true;
  },
  success: function (data) {
    //window.location.replace(get_homepage_url+'trisine');

    var fd = new FormData();
    var file = $('#featured').val();
    fd.append("featured", file);
    fd.append('action', 'thumbnail_up');

    jQuery.ajax({
        type: 'POST',
        url: t_ajax_url.ajax_url,
        data: fd,
        contentType: false,
        processData: false,
        success: function(response){
            console.log(response);
        }
    });
  },
  error: function(xhr, status, error) {
    console.log(status);
  }
});

这是保存缩略图的代码,现在我只是用帖子 ID 22 进行测试:

  add_action( 'wp_ajax_thumbnail_up', 't_thumbnail_up' );
  function t_thumbnail_up(){

    $uploaddir = wp_upload_dir();
    $file = $_FILE['featured'];

    $uploadfile = $uploaddir['path'] . '/' . basename( $file['name'] );
    move_uploaded_file( $file['tmp_name'] , $uploadfile );
    $filename = basename( $uploadfile );

    $wp_filetype = wp_check_filetype(basename($filename), null );

    $attachment = array(
      'post_mime_type' => $wp_filetype['type'],
      'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
      'post_content' => '',
      'post_status' => 'inherit',
      'menu_order' => $_i + 1000
      );
    $attach_id = wp_insert_attachment( $attachment, $uploadfile );

    update_post_meta(22, '_thumbnail_id',$attach_id);
    set_post_thumbnail( 22, $thumbnail_id );

    exit();
  }

结果是上传了一些东西,但它似乎只是文件夹名称,即 11 月的月份数,该文件夹实际上并未在服务器上创建:

任何有关我如何使其工作的帮助将不胜感激。

【问题讨论】:

    标签: php jquery ajax wordpress file-upload


    【解决方案1】:

    使用这个函数来处理来自 ajax 的文件。

    <?php
    $thumbnail = $_FILES[ 'featured' ];
    $thumbnail_id = media_handle_sideload( $thumbnail, $post_id );
    set_post_thumbnail( $post_id, $screenshot_id );
    

    【讨论】:

    • 感谢您的建议,似乎不起作用,但我感谢您的回答:)
    • @david-mendienta 你能告诉我什么是 var file = $('#featured').val();和 $file = $_FILE['featured'];返回?
    • 返回数组(0) { }
    • @david-mendienta 都返回空?这意味着您没有正确获取上传的图像。您可以在上传图像后检查文件字段并查看图像名称的存储位置。您可能可以使用 javascript 获取它并将其传递给您的 ajax。如果您需要进一步的帮助,请告诉我:))
    猜你喜欢
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 2018-09-13
    • 2021-04-18
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多