WordPress 5.x:以编程方式无法上传图片

时间:2019-01-29 22:41:06

标签: php wordpress

我正在WordPress上创建一个自定义插件,以将我的产品从数据库上传到WooCommerce。所有逻辑都可以正常工作,但是在上传图像并将其附加到产品上时,它不起作用。

我尝试过使用从源到常规目录的常规副本,然后创建媒体发布,但是没有用。

这是我目前正在尝试的方法:

$image_id = media_sideload_image( 
                urlencode( $item['ImgPath1'] ),
                $post_id,
                $item['Title'],
                'id'
            );
add_post_meta( $post_id, '_thumbnail_id', $image_id );

我也尝试过:

$filename = basename( $source ); // Get the filename including extension from the $fileurl e.g. myimage.jpg

$destination = WP_CONTENT_DIR. '/uploads/product_images/' . $filename; // Specify where we wish to upload the file, generally in the wp uploads directory

copy( $source, $destination ); // Copy the file

$filetype = wp_check_filetype( $destination ); // Get the mime type of the file

$attachment = array( // Set up our images post data
  'guid'           => get_option( 'siteurl' ) . '/wp-content/uploads/product_images/' . $filename,
  'post_mime_type' => $filetype['type'],
  'post_title'     => $filename,
  'post_author'    => 1,
  'post_content'   => ''
);

我希望至少能看到ftp上的图像,但是没有任何报告,并且我的产品继续导入而没有任何问题。

1 个答案:

答案 0 :(得分:1)

您的第二个示例似乎不完整,因此我将忽略它,而专注于修复第一个示例。

第一个示例的问题是media_sideload_image()设计用于外部URL,而不是同一服务器上的文件路径。但是,该功能的大部分内部工作实际上发生在media_handle_sideload()中,一旦文件下载到本地服务器上的临时位置,该调用便被调用。

以下代码主要是从内存中编写的,尚未经过测试,但应该可以工作:

function insert_media_from_path( $file_path, $attach_to = 0, $title = null, $delete_original = false ) {
  if( !file_exists( $file_path ) ) {
    return false;
  }
  $file_array = array(
    'name' => basename($file_path),
    'tmp_name' => $file_path
  );
  $id = media_handle_sideload( $file_array, $attach_to, $title );
  if( $id && $delete_original ) {
    unlink( $file_path );
  }
  return $id;
}