WC_REST_Products_Controller::duplicate_product()publicWC 1.0

Duplicate a product and returns the duplicated product. The product status is set to "draft" and the name includes a "(copy)" at the end by default.

Method of the class: WC_REST_Products_Controller{}

No Hooks.

Return

WP_REST_Response|WP_Error.

Usage

$WC_REST_Products_Controller = new WC_REST_Products_Controller();
$WC_REST_Products_Controller->duplicate_product( $request );
$request(WP_REST_Request) (required)
Request data.

WC_REST_Products_Controller::duplicate_product() code WC 9.5.1

public function duplicate_product( $request ) {
	$product_id = $request->get_param( 'id' );
	$product    = wc_get_product( $product_id );

	if ( ! $product ) {
		return new WP_Error( 'woocommerce_rest_product_invalid_id', __( 'Invalid product ID.', 'woocommerce' ), array( 'status' => 404 ) );
	}

	// Creating product object from request data in preparation for copying.
	$updated_product    = $this->prepare_object_for_database( $request );
	$duplicated_product = ( new WC_Admin_Duplicate_Product() )->product_duplicate( $updated_product );

	if ( is_wp_error( $duplicated_product ) ) {
		return new WP_Error( 'woocommerce_rest_product_duplicate_error', $duplicated_product->get_error_message(), array( 'status' => 400 ) );
	}

	$response_data = $duplicated_product->get_data();

	return new WP_REST_Response( $response_data, 200 );
}