通过WooCommerce Rest API导入商品时如何重命名上传图片?
解决WooCommerce REST API导入商品时修改图片名称的问题
当你通过REST API导入商品并使用远程图片链接时,WooCommerce默认会保留原文件名。要改成随机数字文件名,有两种可行方案:
方案一:手动处理图片(适合少量商品)
先把远程图片下载到本地,重命名为随机数字后上传到WordPress媒体库,再将新的媒体链接关联到商品:
<?php // 1. 下载远程图片到临时目录 $remote_image_url = 'http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_front.jpg'; $temp_file = download_url($remote_image_url); if (!is_wp_error($temp_file)) { // 2. 生成随机数字文件名(示例为4位随机数,可按需调整位数) $random_filename = rand(1000, 9999) . '.jpg'; // 3. 准备上传参数 $file = [ 'name' => $random_filename, 'tmp_name' => $temp_file, 'type' => wp_check_filetype($random_filename)['type'], 'size' => filesize($temp_file), 'error' => 0 ]; // 4. 上传到媒体库 require_once(ABSPATH . 'wp-admin/includes/image.php'); require_once(ABSPATH . 'wp-admin/includes/file.php'); require_once(ABSPATH . 'wp-admin/includes/media.php'); $attachment_id = media_handle_upload('file', 0, [], [ 'test_form' => false ]); if (!is_wp_error($attachment_id)) { // 5. 获取上传后的图片URL $image_url = wp_get_attachment_url($attachment_id); // 6. 组装商品数据并提交 $data = [ 'name' => 'Premium Quality', 'type' => 'simple', 'regular_price' => '21.99', 'description' => 'Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.', 'short_description' => 'Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.', 'categories' => [ ['id' => 9], ['id' => 14] ], 'images' => [ ['src' => $image_url] ] ]; print_r($woocommerce->post('products', $data)); } // 清理临时文件 @unlink($temp_file); } ?>
方案二:用WordPress钩子自动修改(适合批量导入)
在你的主题functions.php文件中添加以下代码,利用WordPress的上传过滤钩子,在WooCommerce拉取远程图片时自动重命名:
// 过滤上传文件,修改文件名 add_filter('wp_handle_upload_prefilter', 'rename_product_image_to_random_number'); function rename_product_image_to_random_number($file) { // 仅针对WooCommerce商品创建的请求修改文件名 if (isset($_REQUEST['action']) && $_REQUEST['action'] === 'woocommerce_rest_create_product') { // 生成随机数字文件名,保留原图片扩展名 $ext = pathinfo($file['name'], PATHINFO_EXTENSION); $file['name'] = rand(1000, 999999) . '.' . $ext; } return $file; } // 配合远程图片导入的补充处理 add_filter('woocommerce_rest_pre_insert_product_object', 'modify_remote_image_filename', 10, 3); function modify_remote_image_filename($prepared_product, $request, $creating) { if ($creating && !empty($prepared_product->get_images())) { foreach ($prepared_product->get_images() as $image) { // 确保远程图片下载时触发上面的重命名钩子 if (!empty($image['src']) && strpos($image['src'], 'http') === 0) { // 无需额外操作,wp_handle_upload_prefilter会自动处理文件名 } } } return $prepared_product; }
说明:第二种方案通过钩子精准拦截WooCommerce商品创建时的图片上传请求,自动将文件名替换为随机数字,不影响其他场景的文件上传操作。
内容的提问来源于stack exchange,提问作者seyedrezabazyar
相关产品推荐
相关产品推荐

