如何将图像文件传递给wp_Handle_Upload?

时间:2014-04-13 作者:Gixty

我一直在到处寻找这个问题,但一直没有找到答案。

我需要将一个文件从url源传递到wp\\u handle\\u upload。我如何才能做到这一点?

非常感谢。

2 个回复
SO网友:Rarst

wp_handle_upload() 是用来处理上传的。它需要上传相关输入。

要从远程URL“上载”图像,有media_sideload_image(). 因为您实际上并没有指定文件的类型,所以您可能需要自己修改一些,以此函数为例。

SO网友:gmazzap

正如@Rarst所说,处理外部上传和创建相关附件帖子最方便的方法是使用media_sideload_image(), 此功能:

下载url,验证它是否是有效的a图像,如果是,则创建附件帖子,将此附件附加到id作为参数传递的特定帖子img 然而,有时人们可能只想访问附件帖子id,而对将附件附加到任何帖子不感兴趣,在这种情况下WordPress没有内置功能,因此最方便的方法是从media_sideload_image() 和部分media_handle_sideload():

 function custom_media_sideload_image( $image_url = \'\', $post_id = false  ) {
   require_once ABSPATH . \'wp-admin/includes/file.php\';
   $tmp = download_url( $image_url );
   // Set variables for storage
   // fix file filename for query strings
   preg_match( \'/[^\\?]+\\.(jpe?g|jpe|gif|png)\\b/i\', $image_url, $matches );
   $file_array[\'name\'] = basename($matches[0]);
   $file_array[\'tmp_name\'] = $tmp;
   // If error storing temporarily, unlink
   if ( is_wp_error( $tmp ) ) {
    @unlink($file_array[\'tmp_name\']);
    $file_array[\'tmp_name\'] = \'\';
   }
   $time = current_time( \'mysql\' );
   $file = wp_handle_sideload( $file_array, array(\'test_form\'=>false), $time );
   if ( isset($file[\'error\']) ) {
    return new WP_Error( \'upload_error\', $file[\'error\'] );
   }
   $url = $file[\'url\'];
   $type = $file[\'type\'];
   $file = $file[\'file\'];
   $title = preg_replace(\'/\\.[^.]+$/\', \'\', basename($file) );
   $parent = (int) absint( $post_id ) > 0 ? absint($post_id) : 0;
   $attachment = array(
     \'post_mime_type\' => $type,
     \'guid\' => $url,
     \'post_parent\' => $parent,
     \'post_title\' => $title,
     \'post_content\' => \'\',
   );
   $id = wp_insert_attachment($attachment, $file, $parent);
   if ( !is_wp_error($id) ) {
    require_once ABSPATH . \'wp-admin/includes/image.php\'; 
    $data = wp_generate_attachment_metadata( $id, $file );
    wp_update_attachment_metadata( $id, $data );
  }  
  return $id;
}
此函数的作用是media_sideload_image() 但返回附件id,或WP_Error 如果出了问题。

它需要一个可选参数$post_id 将媒体附加到特定帖子/页面,但如果未通过,则会创建附加帖子,但不会附加到任何帖子。

结束

相关推荐

上传的图像不在/Uploads文件夹中

网站存在巨大问题。我更新了主题以使用帖子缩略图(这是多么旧),然后在尝试上载图像以用作特色缩略图时:图像会处理/压缩,但URL会导致404。网站没有任何异常。htaccess。实际上没有wp content/uploads目录,所以我做了一个,chmod权限是0755,所以这不应该是问题所在。我将“媒体设置”文件夹重置为默认文件夹,但该文件夹中不会出现任何图像。编辑:将上载文件夹更改为0777权限似乎可以解决此问题。这样保留权限安全吗?