我正在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上的图像,但是没有任何报告,并且我的产品继续导入而没有任何问题。
答案 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;
}