Automattic\WooCommerce\Internal\Abilities\Domain

ProductUpdate::executepublic staticWC 10.9.0

Update a product.

Method of the class: ProductUpdate{}

No Hooks.

Returns

Array|\WP_Error.

Usage

$result = ProductUpdate::execute( $input );
$input(array) (required)
Ability input.

Changelog

Since 10.9.0 Introduced.

ProductUpdate::execute() code WC 11.0.1

public static function execute( array $input ) {
	$product = self::get_product_from_input( $input );

	if ( is_wp_error( $product ) ) {
		return $product;
	}

	if ( empty( array_diff( array_keys( $input ), array( 'id' ) ) ) ) {
		return new \WP_Error(
			'woocommerce_product_update_no_fields',
			__( 'At least one product field is required to update a product.', 'woocommerce' ),
			array( 'status' => 400 )
		);
	}

	$product_config = self::get_product_config_for_product( $product );

	if ( is_wp_error( $product_config ) ) {
		return $product_config;
	}

	if (
		isset( $input['status'] )
		&& in_array(
			sanitize_key( $input['status'] ),
			array( ProductStatus::PUBLISH, ProductStatus::FUTURE, ProductStatus::PRIVATE ),
			true
		)
		&& sanitize_key( $input['status'] ) !== $product->get_status()
		&& ! self::current_user_can_publish_products()
	) {
		return new \WP_Error(
			'woocommerce_product_publish_forbidden',
			__( 'You are not allowed to publish products.', 'woocommerce' ),
			array( 'status' => rest_authorization_required_code() )
		);
	}

	if ( isset( $input['product_type_alias'] ) ) {
		$product_config = self::get_product_config_for_alias( $input['product_type_alias'] );

		if ( is_wp_error( $product_config ) ) {
			return $product_config;
		}

		$product = wc_get_product_object( $product_config['wc_type'], $product->get_id() );

		if ( ! $product ) {
			return new \WP_Error(
				'woocommerce_invalid_product_type',
				__( 'Invalid product type.', 'woocommerce' ),
				array( 'status' => 400 )
			);
		}
	}

	try {
		if ( isset( $input['product_type_alias'] ) ) {
			self::apply_product_type_config( $product, $product_config );
		}

		$validation_error = self::set_product_props_from_input( $product, $input, $product_config );
		if ( is_wp_error( $validation_error ) ) {
			return $validation_error;
		}
	} catch ( \WC_Data_Exception $exception ) {
		return self::get_product_data_exception_error( $exception );
	}

	$save_error = self::save_product( $product, 'woocommerce_product_update_failed' );
	if ( is_wp_error( $save_error ) ) {
		return $save_error;
	}

	return array(
		'product' => self::format_product_for_response( $product ),
	);
}