WC_API_Products::edit_product()publicWC 2.2

Edit a product

Метод класса: WC_API_Products{}

Возвращает

Массив|WP_Error.

Использование

$WC_API_Products = new WC_API_Products();
$WC_API_Products->edit_product( $id, $data );
$id(int) (обязательный)
the product ID
$data(массив) (обязательный)
-

Список изменений

С версии 2.2 Введена.

Код WC_API_Products::edit_product() WC 8.7.0

public function edit_product( $id, $data ) {
	try {
		if ( ! isset( $data['product'] ) ) {
			throw new WC_API_Exception( 'woocommerce_api_missing_product_data', sprintf( __( 'No %1$s data specified to edit %1$s', 'woocommerce' ), 'product' ), 400 );
		}

		$data = $data['product'];

		$id = $this->validate_request( $id, 'product', 'edit' );

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

		$product = wc_get_product( $id );

		$data = apply_filters( 'woocommerce_api_edit_product_data', $data, $this );

		// Product title.
		if ( isset( $data['title'] ) ) {
			$product->set_name( wc_clean( $data['title'] ) );
		}

		// Product name (slug).
		if ( isset( $data['name'] ) ) {
			$product->set_slug( wc_clean( $data['name'] ) );
		}

		// Product status.
		if ( isset( $data['status'] ) ) {
			$product->set_status( wc_clean( $data['status'] ) );
		}

		// Product short description.
		if ( isset( $data['short_description'] ) ) {
			// Enable short description html tags.
			$post_excerpt = ( isset( $data['enable_html_short_description'] ) && true === $data['enable_html_short_description'] ) ? wp_filter_post_kses( $data['short_description'] ) : wc_clean( $data['short_description'] );
			$product->set_short_description( $post_excerpt );
		}

		// Product description.
		if ( isset( $data['description'] ) ) {
			// Enable description html tags.
			$post_content = ( isset( $data['enable_html_description'] ) && true === $data['enable_html_description'] ) ? wp_filter_post_kses( $data['description'] ) : wc_clean( $data['description'] );
			$product->set_description( $post_content );
		}

		// Validate the product type.
		if ( isset( $data['type'] ) && ! in_array( wc_clean( $data['type'] ), array_keys( wc_get_product_types() ) ) ) {
			throw new WC_API_Exception( 'woocommerce_api_invalid_product_type', sprintf( __( 'Invalid product type - the product type must be any of these: %s', 'woocommerce' ), implode( ', ', array_keys( wc_get_product_types() ) ) ), 400 );
		}

		// Menu order.
		if ( isset( $data['menu_order'] ) ) {
			$product->set_menu_order( intval( $data['menu_order'] ) );
		}

		// Check for featured/gallery images, upload it and set it.
		if ( isset( $data['images'] ) ) {
			$product = $this->save_product_images( $product, $data['images'] );
		}

		// Save product meta fields.
		$product = $this->save_product_meta( $product, $data );

		// Save variations.
		if ( $product->is_type( 'variable' ) ) {
			if ( isset( $data['variations'] ) && is_array( $data['variations'] ) ) {
				$this->save_variations( $product, $data );
			} else {
				// Just sync variations.
				$product = WC_Product_Variable::sync( $product, false );
			}
		}

		$product->save();

		do_action( 'woocommerce_api_edit_product', $id, $data );

		// Clear cache/transients.
		wc_delete_product_transients( $id );

		return $this->get_product( $id );
	} catch ( WC_Data_Exception $e ) {
		return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
	} catch ( WC_API_Exception $e ) {
		return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
	}
}