【问题标题】:Wordpress file upload no imageWordPress文件上传没有图片
【发布时间】:2014-04-01 06:23:09
【问题描述】:

我正在用 Wordpress 上传一个简单的前端图片。有了这段代码,我可以上传到 wordpress 媒体部分,但我只上传文件的名称和 url,没有图片。

有人知道我还需要做什么才能上传图片吗?

我的表格:

<form id="dash_action" method="post" enctype="multipart/form-data">

   <input type="file" name="file" /> 

   <input name="submit" type="submit" class="button" value="<?php _e( 'Save settings' ); ?>" />

</form><!--End dash_action-->

我的 PHP 表单处理:

if( isset( $_POST['submit'] ) ) {

    $filename = $_FILES['file']['name'];
    $wp_filetype = wp_check_filetype( basename($filename), null );
    $wp_upload_dir = wp_upload_dir();
    $attachment = array(
        'guid' => $wp_upload_dir['subdir'] . '/' . basename( $filename ), 
        'post_mime_type' => $wp_filetype['type'],
        'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
        'post_content' => '',
        'post_status' => 'inherit'
    );
    $attach_id = wp_insert_attachment( $attachment, $filename, 37 );
    require_once( ABSPATH . 'wp-admin/includes/image.php' );
    $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
    wp_update_attachment_metadata( $attach_id, $attach_data );  

}

【问题讨论】:

    标签: php wordpress file-upload upload


    【解决方案1】:

    上传完成后,图片文件会保存在临时文件夹中,如果不复制到某个地方会被删除。您可以使用

    获取文件
    $_FILES['file']['tmp_name'];
    

    这会给你文件路径,你可以用它移动

    move_uploaded_file();
    

    你需要它的地方。

    【讨论】:

    • 好的,谢谢您的回答!但是在这个 Wordpress 示例中,我需要在哪里执行此操作?
    • 我无法为您提供 WordPress 代码,我给出了一个 PHP 的一般示例。因此,您需要了解如何将文件存储在 WordPress 期望的位置,并在需要时进一步处理。
    【解决方案2】:

    WordPress codex 声明“文件必须位于上传目录中”。我添加了一行将上传的文件移动到上传目录并更改了 guid 路径。

    if( isset( $_POST['submit'] ) ) {
    
        $filename = $_FILES['file']['name'];
        $wp_filetype = wp_check_filetype( basename($filename), null );
        $wp_upload_dir = wp_upload_dir();
    
        // Move the uploaded file into the WordPress uploads directory
        move_uploaded_file( $_FILES['file']['tmp_name'], $wp_upload_dir['path']  . '/' . $filename );
    
        $attachment = array(
            'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ), 
            'post_mime_type' => $wp_filetype['type'],
            'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
            'post_content' => '',
            'post_status' => 'inherit'
        );
    
        $filename = $wp_upload_dir['path']  . '/' . $filename;
    
        $attach_id = wp_insert_attachment( $attachment, $filename, 37 );
        require_once( ABSPATH . 'wp-admin/includes/image.php' );
        $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
        wp_update_attachment_metadata( $attach_id, $attach_data );  
    
    }
    

    【讨论】:

      【解决方案3】:
      $upload = wp_upload_bits( $_FILES['file']['name'], null, file_get_contents( $_FILES['file']['tmp_name'] ) );
      
      $wp_filetype = wp_check_filetype( basename( $upload['file'] ), null );
      
      $wp_upload_dir = wp_upload_dir();
      
      $attachment = array(
          'guid' => $wp_upload_dir['baseurl'] . _wp_relative_upload_path( $upload['file'] ),
          'post_mime_type' => $wp_filetype['type'],
          'post_title' => preg_replace('/\.[^.]+$/', '', basename( $upload['file'] )),
          'post_content'   => '',
          'post_status'    => 'inherit'
          );
      
      $attach_id = wp_insert_attachment( $attachment, $upload['file'],  $post_id);
      
      require_once(ABSPATH . 'wp-admin/includes/image.php');
      
      $attach_data = wp_generate_attachment_metadata( $attach_id, $upload['file'] );
      wp_update_attachment_metadata( $attach_id, $attach_data );
      
      set_post_thumbnail(  $post_id, $attach_id );
      update_post_meta( $post_id, '_thumbnail_id', $attach_id );
      

      【讨论】:

        猜你喜欢
        • 2011-01-28
        • 1970-01-01
        • 2012-11-05
        • 1970-01-01
        • 1970-01-01
        • 2016-01-24
        • 2023-03-23
        • 1970-01-01
        • 2019-10-10
        相关资源
        最近更新 更多