WC_API_Products::save_variations( WC_Product $product, array $request )
Save variations
Description Description
Parameters Parameters
- $product
-
(Required)
- $request
-
(Required)
Return Return
(true)
Source Source
File: includes/legacy/api/v2/class-wc-api-products.php
protected function save_variations( $product, $request ) { global $wpdb; $id = $product->get_id(); $attributes = $product->get_attributes(); foreach ( $request['variations'] as $menu_order => $data ) { $variation_id = isset( $data['id'] ) ? absint( $data['id'] ) : 0; $variation = new WC_Product_Variation( $variation_id ); // Create initial name and status. if ( ! $variation->get_slug() ) { /* translators: 1: variation id 2: product name */ $variation->set_name( sprintf( __( 'Variation #%1$s of %2$s', 'woocommerce' ), $variation->get_id(), $product->get_name() ) ); $variation->set_status( isset( $data['visible'] ) && false === $data['visible'] ? 'private' : 'publish' ); } // Parent ID. $variation->set_parent_id( $product->get_id() ); // Menu order. $variation->set_menu_order( $menu_order ); // Status. if ( isset( $data['visible'] ) ) { $variation->set_status( false === $data['visible'] ? 'private' : 'publish' ); } // SKU. if ( isset( $data['sku'] ) ) { $variation->set_sku( wc_clean( $data['sku'] ) ); } // Thumbnail. if ( isset( $data['image'] ) && is_array( $data['image'] ) ) { $image = current( $data['image'] ); if ( is_array( $image ) ) { $image['position'] = 0; } $variation = $this->save_product_images( $variation, array( $image ) ); } // Virtual variation. if ( isset( $data['virtual'] ) ) { $variation->set_virtual( $data['virtual'] ); } // Downloadable variation. if ( isset( $data['downloadable'] ) ) { $is_downloadable = $data['downloadable']; $variation->set_downloadable( $is_downloadable ); } else { $is_downloadable = $variation->get_downloadable(); } // Downloads. if ( $is_downloadable ) { // Downloadable files. if ( isset( $data['downloads'] ) && is_array( $data['downloads'] ) ) { $variation = $this->save_downloadable_files( $variation, $data['downloads'] ); } // Download limit. if ( isset( $data['download_limit'] ) ) { $variation->set_download_limit( $data['download_limit'] ); } // Download expiry. if ( isset( $data['download_expiry'] ) ) { $variation->set_download_expiry( $data['download_expiry'] ); } } // Shipping data. $variation = $this->save_product_shipping_data( $variation, $data ); // Stock handling. $manage_stock = (bool) $variation->get_manage_stock(); if ( isset( $data['managing_stock'] ) ) { $manage_stock = $data['managing_stock']; } $variation->set_manage_stock( $manage_stock ); $stock_status = $variation->get_stock_status(); if ( isset( $data['in_stock'] ) ) { $stock_status = true === $data['in_stock'] ? 'instock' : 'outofstock'; } $variation->set_stock_status( $stock_status ); $backorders = $variation->get_backorders(); if ( isset( $data['backorders'] ) ) { $backorders = $data['backorders']; } $variation->set_backorders( $backorders ); if ( $manage_stock ) { if ( isset( $data['stock_quantity'] ) ) { $variation->set_stock_quantity( $data['stock_quantity'] ); } } else { $variation->set_backorders( 'no' ); $variation->set_stock_quantity( '' ); } // Regular Price. if ( isset( $data['regular_price'] ) ) { $variation->set_regular_price( $data['regular_price'] ); } // Sale Price. if ( isset( $data['sale_price'] ) ) { $variation->set_sale_price( $data['sale_price'] ); } if ( isset( $data['sale_price_dates_from'] ) ) { $variation->set_date_on_sale_from( $data['sale_price_dates_from'] ); } if ( isset( $data['sale_price_dates_to'] ) ) { $variation->set_date_on_sale_to( $data['sale_price_dates_to'] ); } // Tax class. if ( isset( $data['tax_class'] ) ) { $variation->set_tax_class( $data['tax_class'] ); } // Update taxonomies. if ( isset( $data['attributes'] ) ) { $_attributes = array(); foreach ( $data['attributes'] as $attribute_key => $attribute ) { if ( ! isset( $attribute['name'] ) ) { continue; } $taxonomy = 0; $_attribute = array(); if ( isset( $attribute['slug'] ) ) { $taxonomy = $this->get_attribute_taxonomy_by_slug( $attribute['slug'] ); } if ( ! $taxonomy ) { $taxonomy = sanitize_title( $attribute['name'] ); } if ( isset( $attributes[ $taxonomy ] ) ) { $_attribute = $attributes[ $taxonomy ]; } if ( isset( $_attribute['is_variation'] ) && $_attribute['is_variation'] ) { $_attribute_key = sanitize_title( $_attribute['name'] ); if ( isset( $_attribute['is_taxonomy'] ) && $_attribute['is_taxonomy'] ) { // Don't use wc_clean as it destroys sanitized characters $_attribute_value = isset( $attribute['option'] ) ? sanitize_title( stripslashes( $attribute['option'] ) ) : ''; } else { $_attribute_value = isset( $attribute['option'] ) ? wc_clean( stripslashes( $attribute['option'] ) ) : ''; } $_attributes[ $_attribute_key ] = $_attribute_value; } } $variation->set_attributes( $_attributes ); } $variation->save(); do_action( 'woocommerce_api_save_product_variation', $variation_id, $menu_order, $variation ); } return true; }
Changelog Changelog
Version | Description |
---|---|
2.2 | Introduced. |