[API] Manage product order_menu, closes #9866

This commit is contained in:
Claudio Sanches 2015-12-17 08:08:17 -02:00
parent 7ed6eb2cb9
commit b03280e230
1 changed files with 71 additions and 64 deletions

View File

@ -241,7 +241,7 @@ class WC_API_Products extends WC_API_Resource {
} }
/** /**
* Create a new product * Create a new product.
* *
* @since 2.2 * @since 2.2
* @param array $data posted data * @param array $data posted data
@ -257,29 +257,29 @@ class WC_API_Products extends WC_API_Resource {
$data = $data['product']; $data = $data['product'];
// Check permissions // Check permissions.
if ( ! current_user_can( 'publish_products' ) ) { if ( ! current_user_can( 'publish_products' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_create_product', __( 'You do not have permission to create products', 'woocommerce' ), 401 ); throw new WC_API_Exception( 'woocommerce_api_user_cannot_create_product', __( 'You do not have permission to create products', 'woocommerce' ), 401 );
} }
$data = apply_filters( 'woocommerce_api_create_product_data', $data, $this ); $data = apply_filters( 'woocommerce_api_create_product_data', $data, $this );
// Check if product title is specified // Check if product title is specified.
if ( ! isset( $data['title'] ) ) { if ( ! isset( $data['title'] ) ) {
throw new WC_API_Exception( 'woocommerce_api_missing_product_title', sprintf( __( 'Missing parameter %s', 'woocommerce' ), 'title' ), 400 ); throw new WC_API_Exception( 'woocommerce_api_missing_product_title', sprintf( __( 'Missing parameter %s', 'woocommerce' ), 'title' ), 400 );
} }
// Check product type // Check product type.
if ( ! isset( $data['type'] ) ) { if ( ! isset( $data['type'] ) ) {
$data['type'] = 'simple'; $data['type'] = 'simple';
} }
// Set visible visibility when not sent // Set visible visibility when not sent.
if ( ! isset( $data['catalog_visibility'] ) ) { if ( ! isset( $data['catalog_visibility'] ) ) {
$data['catalog_visibility'] = 'visible'; $data['catalog_visibility'] = 'visible';
} }
// Validate the product type // Validate the product type.
if ( ! in_array( wc_clean( $data['type'] ), array_keys( wc_get_product_types() ) ) ) { if ( ! 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 ); 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 );
} }
@ -299,44 +299,45 @@ class WC_API_Products extends WC_API_Resource {
$new_product = array( $new_product = array(
'post_title' => wc_clean( $data['title'] ), 'post_title' => wc_clean( $data['title'] ),
'post_status' => ( isset( $data['status'] ) ? wc_clean( $data['status'] ) : 'publish' ), 'post_status' => isset( $data['status'] ) ? wc_clean( $data['status'] ) : 'publish',
'post_type' => 'product', 'post_type' => 'product',
'post_excerpt' => ( isset( $data['short_description'] ) ? $post_excerpt : '' ), 'post_excerpt' => isset( $data['short_description'] ) ? $post_excerpt : '',
'post_content' => ( isset( $data['description'] ) ? $post_content : '' ), 'post_content' => isset( $data['description'] ) ? $post_content : '',
'post_author' => get_current_user_id(), 'post_author' => get_current_user_id(),
'menu_order' => isset( $data['menu_order'] ) ? intval( $data['menu_order'] ) : 0,
); );
// Attempts to create the new product // Attempts to create the new product.
$id = wp_insert_post( $new_product, true ); $id = wp_insert_post( $new_product, true );
// Checks for an error in the product creation // Checks for an error in the product creation.
if ( is_wp_error( $id ) ) { if ( is_wp_error( $id ) ) {
throw new WC_API_Exception( 'woocommerce_api_cannot_create_product', $id->get_error_message(), 400 ); throw new WC_API_Exception( 'woocommerce_api_cannot_create_product', $id->get_error_message(), 400 );
} }
// Check for featured/gallery images, upload it and set it // Check for featured/gallery images, upload it and set it.
if ( isset( $data['images'] ) ) { if ( isset( $data['images'] ) ) {
$this->save_product_images( $id, $data['images'] ); $this->save_product_images( $id, $data['images'] );
} }
// Save product meta fields // Save product meta fields.
$this->save_product_meta( $id, $data ); $this->save_product_meta( $id, $data );
// Save variations // Save variations.
if ( isset( $data['type'] ) && 'variable' == $data['type'] && isset( $data['variations'] ) && is_array( $data['variations'] ) ) { if ( isset( $data['type'] ) && 'variable' == $data['type'] && isset( $data['variations'] ) && is_array( $data['variations'] ) ) {
$this->save_variations( $id, $data ); $this->save_variations( $id, $data );
} }
do_action( 'woocommerce_api_create_product', $id, $data ); do_action( 'woocommerce_api_create_product', $id, $data );
// Clear cache/transients // Clear cache/transients.
wc_delete_product_transients( $id ); wc_delete_product_transients( $id );
$this->server->send_status( 201 ); $this->server->send_status( 201 );
return $this->get_product( $id ); return $this->get_product( $id );
} catch ( WC_API_Exception $e ) { } catch ( WC_API_Exception $e ) {
// Remove the product when fails // Remove the product when fails.
$this->clear_product( $id ); $this->clear_product( $id );
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) ); return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
@ -398,20 +399,25 @@ class WC_API_Products extends WC_API_Resource {
wp_update_post( array( 'ID' => $id, 'post_content' => $post_content ) ); wp_update_post( array( 'ID' => $id, 'post_content' => $post_content ) );
} }
// Validate the product type // Menu order.
if ( isset( $data['menu_order'] ) ) {
wp_update_post( array( 'ID' => $id, 'menu_order' => intval( $data['menu_order'] ) ) );
}
// Validate the product type.
if ( isset( $data['type'] ) && ! in_array( wc_clean( $data['type'] ), array_keys( wc_get_product_types() ) ) ) { 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 ); 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 );
} }
// Check for featured/gallery images, upload it and set it // Check for featured/gallery images, upload it and set it.
if ( isset( $data['images'] ) ) { if ( isset( $data['images'] ) ) {
$this->save_product_images( $id, $data['images'] ); $this->save_product_images( $id, $data['images'] );
} }
// Save product meta fields // Save product meta fields.
$this->save_product_meta( $id, $data ); $this->save_product_meta( $id, $data );
// Save variations // Save variations.
$product = get_product( $id ); $product = get_product( $id );
if ( $product->is_type( 'variable' ) ) { if ( $product->is_type( 'variable' ) ) {
if ( isset( $data['variations'] ) && is_array( $data['variations'] ) ) { if ( isset( $data['variations'] ) && is_array( $data['variations'] ) ) {
@ -424,7 +430,7 @@ class WC_API_Products extends WC_API_Resource {
do_action( 'woocommerce_api_edit_product', $id, $data ); do_action( 'woocommerce_api_edit_product', $id, $data );
// Clear cache/transients // Clear cache/transients.
wc_delete_product_transients( $id ); wc_delete_product_transients( $id );
return $this->get_product( $id ); return $this->get_product( $id );
@ -1143,6 +1149,7 @@ class WC_API_Products extends WC_API_Resource {
'variations' => array(), 'variations' => array(),
'parent' => array(), 'parent' => array(),
'grouped_products' => array(), 'grouped_products' => array(),
'menu_order' => $product->post->menu_order,
); );
} }
@ -1231,7 +1238,7 @@ class WC_API_Products extends WC_API_Resource {
} }
/** /**
* Save product meta * Save product meta.
* *
* @since 2.2 * @since 2.2
* @param int $product_id * @param int $product_id
@ -1242,7 +1249,7 @@ class WC_API_Products extends WC_API_Resource {
protected function save_product_meta( $product_id, $data ) { protected function save_product_meta( $product_id, $data ) {
global $wpdb; global $wpdb;
// Product Type // Product Type.
$product_type = null; $product_type = null;
if ( isset( $data['type'] ) ) { if ( isset( $data['type'] ) ) {
$product_type = wc_clean( $data['type'] ); $product_type = wc_clean( $data['type'] );
@ -1255,40 +1262,40 @@ class WC_API_Products extends WC_API_Resource {
} }
} }
// Virtual // Virtual.
if ( isset( $data['virtual'] ) ) { if ( isset( $data['virtual'] ) ) {
update_post_meta( $product_id, '_virtual', ( true === $data['virtual'] ) ? 'yes' : 'no' ); update_post_meta( $product_id, '_virtual', ( true === $data['virtual'] ) ? 'yes' : 'no' );
} }
// Tax status // Tax status.
if ( isset( $data['tax_status'] ) ) { if ( isset( $data['tax_status'] ) ) {
update_post_meta( $product_id, '_tax_status', wc_clean( $data['tax_status'] ) ); update_post_meta( $product_id, '_tax_status', wc_clean( $data['tax_status'] ) );
} }
// Tax Class // Tax Class.
if ( isset( $data['tax_class'] ) ) { if ( isset( $data['tax_class'] ) ) {
update_post_meta( $product_id, '_tax_class', wc_clean( $data['tax_class'] ) ); update_post_meta( $product_id, '_tax_class', wc_clean( $data['tax_class'] ) );
} }
// Catalog Visibility // Catalog Visibility.
if ( isset( $data['catalog_visibility'] ) ) { if ( isset( $data['catalog_visibility'] ) ) {
update_post_meta( $product_id, '_visibility', wc_clean( $data['catalog_visibility'] ) ); update_post_meta( $product_id, '_visibility', wc_clean( $data['catalog_visibility'] ) );
} }
// Purchase Note // Purchase Note.
if ( isset( $data['purchase_note'] ) ) { if ( isset( $data['purchase_note'] ) ) {
update_post_meta( $product_id, '_purchase_note', wc_clean( $data['purchase_note'] ) ); update_post_meta( $product_id, '_purchase_note', wc_clean( $data['purchase_note'] ) );
} }
// Featured Product // Featured Product.
if ( isset( $data['featured'] ) ) { if ( isset( $data['featured'] ) ) {
update_post_meta( $product_id, '_featured', ( true === $data['featured'] ) ? 'yes' : 'no' ); update_post_meta( $product_id, '_featured', ( true === $data['featured'] ) ? 'yes' : 'no' );
} }
// Shipping data // Shipping data.
$this->save_product_shipping_data( $product_id, $data ); $this->save_product_shipping_data( $product_id, $data );
// SKU // SKU.
if ( isset( $data['sku'] ) ) { if ( isset( $data['sku'] ) ) {
$sku = get_post_meta( $product_id, '_sku', true ); $sku = get_post_meta( $product_id, '_sku', true );
$new_sku = wc_clean( $data['sku'] ); $new_sku = wc_clean( $data['sku'] );
@ -1309,7 +1316,7 @@ class WC_API_Products extends WC_API_Resource {
} }
} }
// Attributes // Attributes.
if ( isset( $data['attributes'] ) ) { if ( isset( $data['attributes'] ) ) {
$attributes = array(); $attributes = array();
@ -1338,7 +1345,7 @@ class WC_API_Products extends WC_API_Resource {
$options = $attribute['options']; $options = $attribute['options'];
if ( ! is_array( $attribute['options'] ) ) { if ( ! is_array( $attribute['options'] ) ) {
// Text based attributes - Posted values are term names // Text based attributes - Posted values are term names.
$options = explode( WC_DELIMITER, $options ); $options = explode( WC_DELIMITER, $options );
} }
@ -1348,13 +1355,13 @@ class WC_API_Products extends WC_API_Resource {
$values = array(); $values = array();
} }
// Update post terms // Update post terms.
if ( taxonomy_exists( $taxonomy ) ) { if ( taxonomy_exists( $taxonomy ) ) {
wp_set_object_terms( $product_id, $values, $taxonomy ); wp_set_object_terms( $product_id, $values, $taxonomy );
} }
if ( $values ) { if ( $values ) {
// Add attribute to array, but don't set values // Add attribute to array, but don't set values.
$attributes[ $taxonomy ] = array( $attributes[ $taxonomy ] = array(
'name' => $taxonomy, 'name' => $taxonomy,
'value' => '', 'value' => '',
@ -1366,16 +1373,16 @@ class WC_API_Products extends WC_API_Resource {
} }
} elseif ( isset( $attribute['options'] ) ) { } elseif ( isset( $attribute['options'] ) ) {
// Array based // Array based.
if ( is_array( $attribute['options'] ) ) { if ( is_array( $attribute['options'] ) ) {
$values = implode( ' ' . WC_DELIMITER . ' ', array_map( 'wc_clean', $attribute['options'] ) ); $values = implode( ' ' . WC_DELIMITER . ' ', array_map( 'wc_clean', $attribute['options'] ) );
// Text based, separate by pipe // Text based, separate by pipe.
} else { } else {
$values = implode( ' ' . WC_DELIMITER . ' ', array_map( 'wc_clean', explode( WC_DELIMITER, $attribute['options'] ) ) ); $values = implode( ' ' . WC_DELIMITER . ' ', array_map( 'wc_clean', explode( WC_DELIMITER, $attribute['options'] ) ) );
} }
// Custom attribute - Add attribute to array and set the values // Custom attribute - Add attribute to array and set the values.
$attributes[ $attribute_slug ] = array( $attributes[ $attribute_slug ] = array(
'name' => wc_clean( $attribute['name'] ), 'name' => wc_clean( $attribute['name'] ),
'value' => $values, 'value' => $values,
@ -1401,10 +1408,10 @@ class WC_API_Products extends WC_API_Resource {
update_post_meta( $product_id, '_product_attributes', $attributes ); update_post_meta( $product_id, '_product_attributes', $attributes );
} }
// Sales and prices // Sales and prices.
if ( in_array( $product_type, array( 'variable', 'grouped' ) ) ) { if ( in_array( $product_type, array( 'variable', 'grouped' ) ) ) {
// Variable and grouped products have no prices // Variable and grouped products have no prices.
update_post_meta( $product_id, '_regular_price', '' ); update_post_meta( $product_id, '_regular_price', '' );
update_post_meta( $product_id, '_sale_price', '' ); update_post_meta( $product_id, '_sale_price', '' );
update_post_meta( $product_id, '_sale_price_dates_from', '' ); update_post_meta( $product_id, '_sale_price_dates_from', '' );
@ -1413,7 +1420,7 @@ class WC_API_Products extends WC_API_Resource {
} else { } else {
// Regular Price // Regular Price.
if ( isset( $data['regular_price'] ) ) { if ( isset( $data['regular_price'] ) ) {
$regular_price = ( '' === $data['regular_price'] ) ? '' : wc_format_decimal( $data['regular_price'] ); $regular_price = ( '' === $data['regular_price'] ) ? '' : wc_format_decimal( $data['regular_price'] );
update_post_meta( $product_id, '_regular_price', $regular_price ); update_post_meta( $product_id, '_regular_price', $regular_price );
@ -1421,7 +1428,7 @@ class WC_API_Products extends WC_API_Resource {
$regular_price = get_post_meta( $product_id, '_regular_price', true ); $regular_price = get_post_meta( $product_id, '_regular_price', true );
} }
// Sale Price // Sale Price.
if ( isset( $data['sale_price'] ) ) { if ( isset( $data['sale_price'] ) ) {
$sale_price = ( '' === $data['sale_price'] ) ? '' : wc_format_decimal( $data['sale_price'] ); $sale_price = ( '' === $data['sale_price'] ) ? '' : wc_format_decimal( $data['sale_price'] );
update_post_meta( $product_id, '_sale_price', $sale_price ); update_post_meta( $product_id, '_sale_price', $sale_price );
@ -1450,7 +1457,7 @@ class WC_API_Products extends WC_API_Resource {
update_post_meta( $product_id, '_sale_price_dates_from', $date_from ); update_post_meta( $product_id, '_sale_price_dates_from', $date_from );
} }
// Update price if on sale // Update price if on sale.
if ( '' !== $sale_price && '' == $date_to && '' == $date_from ) { if ( '' !== $sale_price && '' == $date_to && '' == $date_from ) {
update_post_meta( $product_id, '_price', wc_format_decimal( $sale_price ) ); update_post_meta( $product_id, '_price', wc_format_decimal( $sale_price ) );
} else { } else {
@ -1468,12 +1475,12 @@ class WC_API_Products extends WC_API_Resource {
} }
} }
// Product parent ID for groups // Product parent ID for groups.
if ( isset( $data['parent_id'] ) ) { if ( isset( $data['parent_id'] ) ) {
wp_update_post( array( 'ID' => $product_id, 'post_parent' => absint( $data['parent_id'] ) ) ); wp_update_post( array( 'ID' => $product_id, 'post_parent' => absint( $data['parent_id'] ) ) );
} }
// Update parent if grouped so price sorting works and stays in sync with the cheapest child // Update parent if grouped so price sorting works and stays in sync with the cheapest child.
$_product = wc_get_product( $product_id ); $_product = wc_get_product( $product_id );
if ( $_product->post->post_parent > 0 || $product_type == 'grouped' ) { if ( $_product->post->post_parent > 0 || $product_type == 'grouped' ) {
@ -1510,12 +1517,12 @@ class WC_API_Products extends WC_API_Resource {
} }
} }
// Sold Individually // Sold Individually.
if ( isset( $data['sold_individually'] ) ) { if ( isset( $data['sold_individually'] ) ) {
update_post_meta( $product_id, '_sold_individually', ( true === $data['sold_individually'] ) ? 'yes' : '' ); update_post_meta( $product_id, '_sold_individually', ( true === $data['sold_individually'] ) ? 'yes' : '' );
} }
// Stock status // Stock status.
if ( isset( $data['in_stock'] ) ) { if ( isset( $data['in_stock'] ) ) {
$stock_status = ( true === $data['in_stock'] ) ? 'instock' : 'outofstock'; $stock_status = ( true === $data['in_stock'] ) ? 'instock' : 'outofstock';
} else { } else {
@ -1526,9 +1533,9 @@ class WC_API_Products extends WC_API_Resource {
} }
} }
// Stock Data // Stock Data.
if ( 'yes' == get_option( 'woocommerce_manage_stock' ) ) { if ( 'yes' == get_option( 'woocommerce_manage_stock' ) ) {
// Manage stock // Manage stock.
if ( isset( $data['managing_stock'] ) ) { if ( isset( $data['managing_stock'] ) ) {
$managing_stock = ( true === $data['managing_stock'] ) ? 'yes' : 'no'; $managing_stock = ( true === $data['managing_stock'] ) ? 'yes' : 'no';
update_post_meta( $product_id, '_manage_stock', $managing_stock ); update_post_meta( $product_id, '_manage_stock', $managing_stock );
@ -1536,7 +1543,7 @@ class WC_API_Products extends WC_API_Resource {
$managing_stock = get_post_meta( $product_id, '_manage_stock', true ); $managing_stock = get_post_meta( $product_id, '_manage_stock', true );
} }
// Backorders // Backorders.
if ( isset( $data['backorders'] ) ) { if ( isset( $data['backorders'] ) ) {
if ( 'notify' == $data['backorders'] ) { if ( 'notify' == $data['backorders'] ) {
$backorders = 'notify'; $backorders = 'notify';
@ -1570,7 +1577,7 @@ class WC_API_Products extends WC_API_Resource {
wc_update_product_stock_status( $product_id, $stock_status ); wc_update_product_stock_status( $product_id, $stock_status );
// Stock quantity // Stock quantity.
if ( isset( $data['stock_quantity'] ) ) { if ( isset( $data['stock_quantity'] ) ) {
wc_update_product_stock( $product_id, wc_stock_amount( $data['stock_quantity'] ) ); wc_update_product_stock( $product_id, wc_stock_amount( $data['stock_quantity'] ) );
} else if ( isset( $data['inventory_delta'] ) ) { } else if ( isset( $data['inventory_delta'] ) ) {
@ -1581,7 +1588,7 @@ class WC_API_Products extends WC_API_Resource {
} }
} else { } else {
// Don't manage stock // Don't manage stock.
update_post_meta( $product_id, '_manage_stock', 'no' ); update_post_meta( $product_id, '_manage_stock', 'no' );
update_post_meta( $product_id, '_backorders', $backorders ); update_post_meta( $product_id, '_backorders', $backorders );
update_post_meta( $product_id, '_stock', '' ); update_post_meta( $product_id, '_stock', '' );
@ -1593,7 +1600,7 @@ class WC_API_Products extends WC_API_Resource {
wc_update_product_stock_status( $product_id, $stock_status ); wc_update_product_stock_status( $product_id, $stock_status );
} }
// Upsells // Upsells.
if ( isset( $data['upsell_ids'] ) ) { if ( isset( $data['upsell_ids'] ) ) {
$upsells = array(); $upsells = array();
$ids = $data['upsell_ids']; $ids = $data['upsell_ids'];
@ -1611,7 +1618,7 @@ class WC_API_Products extends WC_API_Resource {
} }
} }
// Cross sells // Cross sells.
if ( isset( $data['cross_sell_ids'] ) ) { if ( isset( $data['cross_sell_ids'] ) ) {
$crosssells = array(); $crosssells = array();
$ids = $data['cross_sell_ids']; $ids = $data['cross_sell_ids'];
@ -1629,19 +1636,19 @@ class WC_API_Products extends WC_API_Resource {
} }
} }
// Product categories // Product categories.
if ( isset( $data['categories'] ) && is_array( $data['categories'] ) ) { if ( isset( $data['categories'] ) && is_array( $data['categories'] ) ) {
$term_ids = array_unique( array_map( 'intval', $data['categories'] ) ); $term_ids = array_unique( array_map( 'intval', $data['categories'] ) );
wp_set_object_terms( $product_id, $term_ids, 'product_cat' ); wp_set_object_terms( $product_id, $term_ids, 'product_cat' );
} }
// Product tags // Product tags.
if ( isset( $data['tags'] ) && is_array( $data['tags'] ) ) { if ( isset( $data['tags'] ) && is_array( $data['tags'] ) ) {
$term_ids = array_unique( array_map( 'intval', $data['tags'] ) ); $term_ids = array_unique( array_map( 'intval', $data['tags'] ) );
wp_set_object_terms( $product_id, $term_ids, 'product_tag' ); wp_set_object_terms( $product_id, $term_ids, 'product_tag' );
} }
// Downloadable // Downloadable.
if ( isset( $data['downloadable'] ) ) { if ( isset( $data['downloadable'] ) ) {
$is_downloadable = ( true === $data['downloadable'] ) ? 'yes' : 'no'; $is_downloadable = ( true === $data['downloadable'] ) ? 'yes' : 'no';
update_post_meta( $product_id, '_downloadable', $is_downloadable ); update_post_meta( $product_id, '_downloadable', $is_downloadable );
@ -1649,31 +1656,31 @@ class WC_API_Products extends WC_API_Resource {
$is_downloadable = get_post_meta( $product_id, '_downloadable', true ); $is_downloadable = get_post_meta( $product_id, '_downloadable', true );
} }
// Downloadable options // Downloadable options.
if ( 'yes' == $is_downloadable ) { if ( 'yes' == $is_downloadable ) {
// Downloadable files // Downloadable files.
if ( isset( $data['downloads'] ) && is_array( $data['downloads'] ) ) { if ( isset( $data['downloads'] ) && is_array( $data['downloads'] ) ) {
$this->save_downloadable_files( $product_id, $data['downloads'] ); $this->save_downloadable_files( $product_id, $data['downloads'] );
} }
// Download limit // Download limit.
if ( isset( $data['download_limit'] ) ) { if ( isset( $data['download_limit'] ) ) {
update_post_meta( $product_id, '_download_limit', ( '' === $data['download_limit'] ) ? '' : absint( $data['download_limit'] ) ); update_post_meta( $product_id, '_download_limit', ( '' === $data['download_limit'] ) ? '' : absint( $data['download_limit'] ) );
} }
// Download expiry // Download expiry.
if ( isset( $data['download_expiry'] ) ) { if ( isset( $data['download_expiry'] ) ) {
update_post_meta( $product_id, '_download_expiry', ( '' === $data['download_expiry'] ) ? '' : absint( $data['download_expiry'] ) ); update_post_meta( $product_id, '_download_expiry', ( '' === $data['download_expiry'] ) ? '' : absint( $data['download_expiry'] ) );
} }
// Download type // Download type.
if ( isset( $data['download_type'] ) ) { if ( isset( $data['download_type'] ) ) {
update_post_meta( $product_id, '_download_type', wc_clean( $data['download_type'] ) ); update_post_meta( $product_id, '_download_type', wc_clean( $data['download_type'] ) );
} }
} }
// Product url // Product url.
if ( $product_type == 'external' ) { if ( $product_type == 'external' ) {
if ( isset( $data['product_url'] ) ) { if ( isset( $data['product_url'] ) ) {
update_post_meta( $product_id, '_product_url', wc_clean( $data['product_url'] ) ); update_post_meta( $product_id, '_product_url', wc_clean( $data['product_url'] ) );
@ -1684,7 +1691,7 @@ class WC_API_Products extends WC_API_Resource {
} }
} }
// Reviews allowed // Reviews allowed.
if ( isset( $data['reviews_allowed'] ) ) { if ( isset( $data['reviews_allowed'] ) ) {
$reviews_allowed = ( true === $data['reviews_allowed'] ) ? 'open' : 'closed'; $reviews_allowed = ( true === $data['reviews_allowed'] ) ? 'open' : 'closed';