在用 woocommerce 批量导入图片时,因为导入的商品多时,会导致图片导入失败,我在图片导入失败时,加了一个下载的 retry,图片导入失败的次数大大减少,但是这只是一个减少,并不能完全杜绝,但是这个方法是成本最轻的,其它的方法我会持续尝试。
我在上一个文章关于woocommerce 导入逻辑有详细的介绍,我在这个代码里加了一个 retry 的逻辑,代码如下
// Upload if attachment does not exists.
if ( ! $id && stristr( $url, '://' ) ) {
$attempt = 1;
$retry_interval = 1; // Initial retry interval in seconds.
while ($attempt <= 3) {
$upload = wc_rest_upload_image_from_url( $url );
if ( ! is_wp_error( $upload ) ) {
$id = wc_rest_set_uploaded_image_as_attachment( $upload, $product_id );
if ( ! wp_attachment_is_image( $id ) ) {
/* translators: %s: image URL */
throw new Exception( sprintf( __( 'Not able to attach "%s".', 'woocommerce' ), $url ), 400 );
}
// Save attachment source for future reference.
update_post_meta( $id, '_wc_attachment_source', $url );
break;
} else {
if ($attempt === 3) {
throw new Exception( $upload->get_error_message(), 400 );
}
sleep($retry_interval);
$retry_interval *= 2; // Exponential backoff strategy.
$attempt++;
}
}
}