[CYS] Fix regression and ensure AI-generated content is assigned to products after the third attempt (https://github.com/woocommerce/woocommerce-blocks/pull/12016)
* Fix restriction preventing the update of products with AI-generated content after the 3rd attempt. * use set_slug rather than wp_update_post for updating the product permalink. --------- Co-authored-by: Alba Rincón <alba.rincon@automattic.com>
This commit is contained in:
parent
af23649365
commit
5f4c8e2f7c
|
@ -88,6 +88,12 @@ class ProductUpdater {
|
||||||
return $dummy_products_to_update;
|
return $dummy_products_to_update;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( empty( $dummy_products_to_update ) ) {
|
||||||
|
return array(
|
||||||
|
'product_content' => array(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$products_information_list = $this->assign_ai_selected_images_to_dummy_products( $dummy_products_to_update, $images );
|
$products_information_list = $this->assign_ai_selected_images_to_dummy_products( $dummy_products_to_update, $images );
|
||||||
|
|
||||||
return $this->assign_ai_generated_content_to_dummy_products( $ai_connection, $token, $products_information_list, $business_description );
|
return $this->assign_ai_generated_content_to_dummy_products( $ai_connection, $token, $products_information_list, $business_description );
|
||||||
|
@ -111,7 +117,6 @@ class ProductUpdater {
|
||||||
$dummy_products = $this->fetch_product_ids( 'dummy' );
|
$dummy_products = $this->fetch_product_ids( 'dummy' );
|
||||||
$dummy_products_count = count( $dummy_products );
|
$dummy_products_count = count( $dummy_products );
|
||||||
$products_to_create = max( 0, 6 - $real_products_count - $dummy_products_count );
|
$products_to_create = max( 0, 6 - $real_products_count - $dummy_products_count );
|
||||||
|
|
||||||
while ( $products_to_create > 0 ) {
|
while ( $products_to_create > 0 ) {
|
||||||
$this->create_new_product( self::DUMMY_PRODUCTS[ $products_to_create - 1 ] );
|
$this->create_new_product( self::DUMMY_PRODUCTS[ $products_to_create - 1 ] );
|
||||||
$products_to_create--;
|
$products_to_create--;
|
||||||
|
@ -300,42 +305,52 @@ class ProductUpdater {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
wp_update_post(
|
$product->set_name( $ai_generated_product_content['title'] );
|
||||||
array(
|
$product->set_description( $ai_generated_product_content['description'] );
|
||||||
'ID' => $product->get_id(),
|
$product->set_regular_price( $ai_generated_product_content['price'] );
|
||||||
'post_title' => $ai_generated_product_content['title'],
|
$product->set_slug( sanitize_title( $ai_generated_product_content['title'] ) );
|
||||||
'post_content' => $ai_generated_product_content['description'],
|
$product->save();
|
||||||
'post_name' => sanitize_title( $ai_generated_product_content['title'] ),
|
|
||||||
'meta_input' => array(
|
|
||||||
'_regular_price' => $ai_generated_product_content['price'],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if ( ! empty( $ai_generated_product_content['image']['src'] ) ) {
|
$update_product_image = $this->update_product_image( $product, $ai_generated_product_content );
|
||||||
require_once ABSPATH . 'wp-admin/includes/media.php';
|
|
||||||
require_once ABSPATH . 'wp-admin/includes/file.php';
|
|
||||||
require_once ABSPATH . 'wp-admin/includes/image.php';
|
|
||||||
|
|
||||||
// Since the media_sideload_image function is expensive and can take longer to complete
|
if ( is_wp_error( $update_product_image ) ) {
|
||||||
// the process of downloading the external image and uploading it to the media library,
|
return $update_product_image;
|
||||||
// here we are increasing the time limit to avoid any issues.
|
|
||||||
set_time_limit( 150 );
|
|
||||||
wp_raise_memory_limit( 'image' );
|
|
||||||
|
|
||||||
$product_image_id = media_sideload_image( $ai_generated_product_content['image']['src'], $product->get_id(), $ai_generated_product_content['image']['alt'], 'id' );
|
|
||||||
|
|
||||||
if ( is_wp_error( $product_image_id ) ) {
|
|
||||||
return $product_image_id->get_error_message();
|
|
||||||
}
|
|
||||||
|
|
||||||
$product->set_image_id( $product_image_id );
|
|
||||||
$product->save();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->create_hash_for_ai_modified_product( $product );
|
$this->create_hash_for_ai_modified_product( $product );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the product images with the AI-generated image.
|
||||||
|
*
|
||||||
|
* @param \WC_Product $product The product.
|
||||||
|
* @param array $ai_generated_product_content The AI-generated product content.
|
||||||
|
*
|
||||||
|
* @return string|true
|
||||||
|
*/
|
||||||
|
public function update_product_image( $product, $ai_generated_product_content ) {
|
||||||
|
require_once ABSPATH . 'wp-admin/includes/media.php';
|
||||||
|
require_once ABSPATH . 'wp-admin/includes/file.php';
|
||||||
|
require_once ABSPATH . 'wp-admin/includes/image.php';
|
||||||
|
|
||||||
|
// Since the media_sideload_image function is expensive and can take longer to complete
|
||||||
|
// the process of downloading the external image and uploading it to the media library,
|
||||||
|
// here we are increasing the time limit to avoid any issues.
|
||||||
|
set_time_limit( 150 );
|
||||||
|
wp_raise_memory_limit( 'image' );
|
||||||
|
|
||||||
|
$product_image_id = media_sideload_image( $ai_generated_product_content['image']['src'], $product->get_id(), $ai_generated_product_content['image']['alt'], 'id' );
|
||||||
|
|
||||||
|
if ( is_wp_error( $product_image_id ) ) {
|
||||||
|
return $product_image_id->get_error_message();
|
||||||
|
}
|
||||||
|
|
||||||
|
$product->set_image_id( $product_image_id );
|
||||||
|
$product->save();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assigns the default content for the products.
|
* Assigns the default content for the products.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue