diff --git a/includes/abstracts/abstract-wc-product.php b/includes/abstracts/abstract-wc-product.php index 173d08c8420..762e7fa6bdd 100644 --- a/includes/abstracts/abstract-wc-product.php +++ b/includes/abstracts/abstract-wc-product.php @@ -1973,7 +1973,8 @@ class WC_Product extends WC_Abstract_Legacy_Product { * @return array */ public function get_files() { - $downloadable_files = array_filter( ! empty( $this->get_downloads() ) ? (array) maybe_unserialize( $this->get_downloads() ) : array() ); + $downloads = $this->get_downloads(); + $downloadable_files = array_filter( ! empty( $downloads ) ? (array) maybe_unserialize( $downloads ) : array() ); if ( ! empty( $downloadable_files ) ) { foreach ( $downloadable_files as $key => $file ) { diff --git a/includes/api/class-wc-rest-products-controller.php b/includes/api/class-wc-rest-products-controller.php index 2337af37250..d1587fec9d3 100644 --- a/includes/api/class-wc-rest-products-controller.php +++ b/includes/api/class-wc-rest-products-controller.php @@ -469,20 +469,19 @@ class WC_REST_Products_Controller extends WC_REST_Posts_Controller { * @return array */ protected function get_product_data( $product ) { - $post = get_post( $product->get_id() ); $data = array( 'id' => (int) $product->is_type( 'variation' ) ? $product->get_variation_id() : $product->get_id(), - 'name' => $product->get_title(), - 'slug' => $post->post_name, + 'name' => $product->get_name(), + 'slug' => $product->get_slug(), 'permalink' => $product->get_permalink(), - 'date_created' => wc_rest_prepare_date_response( $post->post_date_gmt ), - 'date_modified' => wc_rest_prepare_date_response( $post->post_modified_gmt ), + 'date_created' => wc_rest_prepare_date_response( $product->get_date_created() ), + 'date_modified' => wc_rest_prepare_date_response( $product->get_date_modified() ), 'type' => $product->get_type(), - 'status' => $post->post_status, + 'status' => $product->get_status(), 'featured' => $product->is_featured(), 'catalog_visibility' => $product->get_catalog_visibility(), - 'description' => wpautop( do_shortcode( $post->post_content ) ), - 'short_description' => apply_filters( 'woocommerce_short_description', $post->post_excerpt ), + 'description' => wpautop( do_shortcode( $product->get_description() ) ), + 'short_description' => apply_filters( 'woocommerce_short_description', $product->get_short_description() ), 'sku' => $product->get_sku(), 'price' => $product->get_price(), 'regular_price' => $product->get_regular_price(), @@ -520,13 +519,13 @@ class WC_REST_Products_Controller extends WC_REST_Posts_Controller { 'shipping_taxable' => $product->is_shipping_taxable(), 'shipping_class' => $product->get_shipping_class(), 'shipping_class_id' => (int) $product->get_shipping_class_id(), - 'reviews_allowed' => ( 'open' === $post->comment_status ), + 'reviews_allowed' => $product->get_reviews_allowed(), 'average_rating' => wc_format_decimal( $product->get_average_rating(), 2 ), 'rating_count' => (int) $product->get_rating_count(), 'related_ids' => array_map( 'absint', array_values( wc_get_related_products( $product->get_id() ) ) ), 'upsell_ids' => array_map( 'absint', $product->get_upsell_ids() ), 'cross_sell_ids' => array_map( 'absint', $product->get_cross_sell_ids() ), - 'parent_id' => $product->is_type( 'variation' ) ? $product->parent->id : $post->post_parent, + 'parent_id' => $product->get_parent_id(), 'purchase_note' => wpautop( do_shortcode( wp_kses_post( $product->get_purchase_note() ) ) ), 'categories' => $this->get_taxonomy_terms( $product ), 'tags' => $this->get_taxonomy_terms( $product, 'tag' ), @@ -866,7 +865,7 @@ class WC_REST_Products_Controller extends WC_REST_Posts_Controller { } if ( isset( $image['position'] ) && 0 === $image['position'] ) { - $product->set_thumbnail_id( $attachment_id ); + $product->set_image_id( $attachment_id ); } else { $gallery[] = $attachment_id; } @@ -886,7 +885,7 @@ class WC_REST_Products_Controller extends WC_REST_Posts_Controller { $product->set_gallery_image_ids( $gallery ); } } else { - $product->set_thumbnail_id( '' ); + $product->set_image_id( '' ); $product->set_gallery_image_ids( array() ); } @@ -1192,7 +1191,7 @@ class WC_REST_Products_Controller extends WC_REST_Posts_Controller { } // Update parent if grouped so price sorting works and stays in sync with the cheapest child. - if ( $product->get_parent_id() > 0 || 'grouped' === $product->get_type() ) { + if ( $product->get_parent_id() > 0 || $product->is_type( 'grouped' ) ) { $clear_parent_ids = array(); @@ -1204,7 +1203,7 @@ class WC_REST_Products_Controller extends WC_REST_Posts_Controller { $parent->save(); } - if ( 'grouped' === $product->get_type() ) { + if ( $product->is_type( 'grouped' ) ) { $clear_parent_ids[] = $product->get_id(); } @@ -1265,40 +1264,40 @@ class WC_REST_Products_Controller extends WC_REST_Posts_Controller { $backorders = $product->get_backorders(); } - if ( 'grouped' === $product->get_type() ) { + if ( $product->is_type( 'grouped' ) ) { $product->set_manage_stock( 'no' ); $product->set_backorders( 'no' ); - $product->set_stock( '' ); + $product->set_stock_quantity( '' ); $product->set_stock_status( $status ); - } elseif ( 'external' === $product->get_type() ) { + } elseif ( $product->is_type( 'external' ) ) { $product->set_manage_stock( 'no' ); $product->set_backorders( 'no' ); - $product->set_stock( '' ); + $product->set_stock_quantity( '' ); $product->set_stock_status( 'instock' ); } elseif ( 'yes' === $manage_stock ) { $product->set_backorders( $backorders ); // Stock status is always determined by children so sync later. - if ( 'variable' !== $product->get_type() ) { + if ( ! $product->is_type( 'variable' ) ) { $product->set_stock_status( $stock_status ); } // Stock quantity. if ( isset( $request['stock_quantity'] ) ) { - $product->set_stock( wc_stock_amount( $request['stock_quantity'] ) ); + $product->set_stock_quantity( wc_stock_amount( $request['stock_quantity'] ) ); } elseif ( isset( $request['inventory_delta'] ) ) { $stock_quantity = wc_stock_amount( $product->get_stock() ); $stock_quantity += wc_stock_amount( $request['inventory_delta'] ); - $product->set_stock( wc_stock_amount( $stock_quantity ) ); + $product->set_stock_quantity( wc_stock_amount( $stock_quantity ) ); } } else { // Don't manage stock. $product->set_manage_stock( 'no' ); $product->set_backorders( $backorders ); - $product->set_stock( '' ); + $product->set_stock_quantity( '' ); $product->set_stock_status( $stock_status ); } - } elseif ( 'variable' !== $product->get_type() ) { + } elseif ( ! $product->is_type( 'variable' ) ) { $product->set_stock_status( $stock_status ); } @@ -1376,7 +1375,7 @@ class WC_REST_Products_Controller extends WC_REST_Posts_Controller { } // Product url and button text for external products. - if ( 'external' === $product->get_type() ) { + if ( $product->is_type( 'external' ) ) { if ( isset( $request['external_url'] ) ) { $product->set_product_url( $request['external_url'] ); } diff --git a/includes/api/legacy/v1/class-wc-api-products.php b/includes/api/legacy/v1/class-wc-api-products.php index 157481faa1d..a2346572e5a 100644 --- a/includes/api/legacy/v1/class-wc-api-products.php +++ b/includes/api/legacy/v1/class-wc-api-products.php @@ -266,12 +266,11 @@ class WC_API_Products extends WC_API_Resource { * @return array */ private function get_product_data( $product ) { - $post = get_post( $product->get_id() ); return array( - 'title' => $product->get_title(), - 'id' => (int) $product->is_type( 'variation' ) ? $product->get_variation_id() : $product->get_id(), - 'created_at' => $this->server->format_datetime( $post->post_date_gmt ), - 'updated_at' => $this->server->format_datetime( $post->post_modified_gmt ), + 'title' => $product->get_name(), + 'id' => (int) $product->is_type( 'variation' ) ? $product->get_variation_id() : $product->get_id(), // @todo variation + 'created_at' => $this->server->format_datetime( $product->get_date_created() ), + 'updated_at' => $this->server->format_datetime( $product->get_date_modified() ), 'type' => $product->get_type(), 'status' => $product->get_status(), 'downloadable' => $product->is_downloadable(), @@ -286,7 +285,7 @@ class WC_API_Products extends WC_API_Resource { 'tax_status' => $product->get_tax_status(), 'tax_class' => $product->get_tax_class(), 'managing_stock' => $product->managing_stock(), - 'stock_quantity' => (int) $product->get_stock_quantity(), + 'stock_quantity' => $product->get_stock_quantity(), 'in_stock' => $product->is_in_stock(), 'backorders_allowed' => $product->backorders_allowed(), 'backordered' => $product->is_on_backorder(), @@ -311,7 +310,7 @@ class WC_API_Products extends WC_API_Resource { 'short_description' => apply_filters( 'woocommerce_short_description', $product->get_short_description() ), 'reviews_allowed' => $product->get_reviews_allowed(), 'average_rating' => wc_format_decimal( $product->get_average_rating(), 2 ), - 'rating_count' => (int) $product->get_rating_count(), + 'rating_count' => $product->get_rating_count(), 'related_ids' => array_map( 'absint', array_values( wc_get_related_products( $product->get_id() ) ) ), 'upsell_ids' => array_map( 'absint', $product->get_upsell_ids() ), 'cross_sell_ids' => array_map( 'absint', $product->get_cross_sell_ids() ), @@ -321,11 +320,11 @@ class WC_API_Products extends WC_API_Resource { 'featured_src' => wp_get_attachment_url( get_post_thumbnail_id( $product->is_type( 'variation' ) ? $product->variation_id : $product->get_id() ) ), 'attributes' => $this->get_attributes( $product ), 'downloads' => $this->get_downloads( $product ), - 'download_limit' => (int) $product->get_download_limit(), - 'download_expiry' => (int) $product->get_download_expiry(), + 'download_limit' => $product->get_download_limit(), + 'download_expiry' => $product->get_download_expiry(), 'download_type' => 'standard', 'purchase_note' => apply_filters( 'the_content', $product->get_purchase_note() ), - 'total_sales' => metadata_exists( 'post', $product->get_id(), 'total_sales' ) ? (int) get_post_meta( $product->get_id(), 'total_sales', true ) : 0, + 'total_sales' => $product->get_total_sales(), 'variations' => array(), 'parent' => array(), ); @@ -401,8 +400,8 @@ class WC_API_Products extends WC_API_Resource { * @return array */ private function get_images( $product ) { - - $images = $attachment_ids = array(); + $images = $attachment_ids = array(); + $product_image = $product->get_image_id(); if ( $product->is_type( 'variation' ) ) { // @todo variation @@ -411,16 +410,16 @@ class WC_API_Products extends WC_API_Resource { // add variation image if set $attachment_ids[] = get_post_thumbnail_id( $product->get_variation_id() ); - } elseif ( ! empty( $product->get_thumbnail_id() ) ) { + } elseif ( ! empty( $product_image ) ) { // otherwise use the parent product featured image if set - $attachment_ids[] = $product->get_thumbnail_id(); + $attachment_ids[] = $product_image; } } else { // Add featured image - if ( ! empty( $product->get_thumbnail_id() ) ) { - $attachment_ids[] = $product->get_thumbnail_id(); + if ( ! empty( $product_image ) ) { + $attachment_ids[] = $product_image; } // add gallery images diff --git a/includes/api/legacy/v2/class-wc-api-products.php b/includes/api/legacy/v2/class-wc-api-products.php index 28c96a8e67e..5ea18323b93 100644 --- a/includes/api/legacy/v2/class-wc-api-products.php +++ b/includes/api/legacy/v2/class-wc-api-products.php @@ -268,7 +268,7 @@ class WC_API_Products extends WC_API_Resource { $id = $product->get_id(); // Checks for an error in the product creation - if ( ! $id > 0 ) { + if ( 0 >= $id ) { throw new WC_API_Exception( 'woocommerce_api_cannot_create_product', $id->get_error_message(), 400 ); } @@ -679,12 +679,11 @@ class WC_API_Products extends WC_API_Resource { */ private function get_product_data( $product ) { $prices_precision = wc_get_price_decimals(); - $post = get_post( $product->get_id() ); return array( - 'title' => $product->get_title(), - 'id' => (int) $product->is_type( 'variation' ) ? $product->get_variation_id() : $product->get_id(), - 'created_at' => $this->server->format_datetime( $post->post_date_gmt ), - 'updated_at' => $this->server->format_datetime( $post->post_modified_gmt ), + 'title' => $product->get_name(), + 'id' => (int) $product->is_type( 'variation' ) ? $product->get_variation_id() : $product->get_id(), // @todo variation + 'created_at' => $this->server->format_datetime( $product->get_date_created() ), + 'updated_at' => $this->server->format_datetime( $product->get_date_modified() ), 'type' => $product->get_type(), 'status' => $product->get_status(), 'downloadable' => $product->is_downloadable(), @@ -699,7 +698,7 @@ class WC_API_Products extends WC_API_Resource { 'tax_status' => $product->get_tax_status(), 'tax_class' => $product->get_tax_class(), 'managing_stock' => $product->managing_stock(), - 'stock_quantity' => (int) $product->get_stock_quantity(), + 'stock_quantity' => $product->get_stock_quantity(), 'in_stock' => $product->is_in_stock(), 'backorders_allowed' => $product->backorders_allowed(), 'backordered' => $product->is_on_backorder(), @@ -726,7 +725,7 @@ class WC_API_Products extends WC_API_Resource { 'short_description' => apply_filters( 'woocommerce_short_description', $product->get_short_description() ), 'reviews_allowed' => $product->get_reviews_allowed(), 'average_rating' => wc_format_decimal( $product->get_average_rating(), 2 ), - 'rating_count' => (int) $product->get_rating_count(), + 'rating_count' => $product->get_rating_count(), 'related_ids' => array_map( 'absint', array_values( wc_get_related_products( $product->get_id() ) ) ), 'upsell_ids' => array_map( 'absint', $product->get_upsell_ids() ), 'cross_sell_ids' => array_map( 'absint', $product->get_cross_sell_ids() ), @@ -734,11 +733,11 @@ class WC_API_Products extends WC_API_Resource { 'categories' => wp_get_post_terms( $product->get_id(), 'product_cat', array( 'fields' => 'names' ) ), 'tags' => wp_get_post_terms( $product->get_id(), 'product_tag', array( 'fields' => 'names' ) ), 'images' => $this->get_images( $product ), - 'featured_src' => (string) wp_get_attachment_url( get_post_thumbnail_id( $product->is_type( 'variation' ) ? $product->variation_id : $product->get_id() ) ), + 'featured_src' => wp_get_attachment_url( get_post_thumbnail_id( $product->is_type( 'variation' ) ? $product->variation_id : $product->get_id() ) ), 'attributes' => $this->get_attributes( $product ), 'downloads' => $this->get_downloads( $product ), - 'download_limit' => (int) $product->get_download_limit(), - 'download_expiry' => (int) $product->get_download_expiry(), + 'download_limit' => $product->get_download_limit(), + 'download_expiry' => $product->get_download_expiry(), 'download_type' => 'standard', 'purchase_note' => wpautop( do_shortcode( wp_kses_post( $product->get_purchase_note() ) ) ), 'total_sales' => $product->get_total_sales(), @@ -928,7 +927,7 @@ class WC_API_Products extends WC_API_Resource { $attribute_object->set_id( $attribute_id ); $attribute_object->set_name( $taxonomy ); $attribute_object->set_options( $values ); - $attribute_object->set_position( isset( $attribute['position'] ) ? (string) absint( $attribute['position'] ) : '0' ); + $attribute_object->set_position( isset( $attribute['position'] ) ? absint( $attribute['position'] ) : 0 ); $attribute_object->set_visible( ( isset( $attribute['visible'] ) && $attribute['visible'] ) ? 1 : 0 ); $attribute_object->set_variation( ( isset( $attribute['variation'] ) && $attribute['variation'] ) ? 1 : 0 ); $attributes[] = $attribute_object; @@ -947,7 +946,7 @@ class WC_API_Products extends WC_API_Resource { $attribute_object = new WC_Product_Attribute(); $attribute_object->set_name( $attribute['name'] ); $attribute_object->set_options( $values ); - $attribute_object->set_position( isset( $attribute['position'] ) ? (string) absint( $attribute['position'] ) : '0' ); + $attribute_object->set_position( isset( $attribute['position'] ) ? absint( $attribute['position'] ) : 0 ); $attribute_object->set_visible( ( isset( $attribute['visible'] ) && $attribute['visible'] ) ? 1 : 0 ); $attribute_object->set_variation( ( isset( $attribute['variation'] ) && $attribute['variation'] ) ? 1 : 0 ); $attributes[] = $attribute_object; @@ -1020,7 +1019,7 @@ class WC_API_Products extends WC_API_Resource { } // Update parent if grouped so price sorting works and stays in sync with the cheapest child - if ( $product->get_parent_id() > 0 || 'grouped' === $product->get_type() ) { + if ( $product->get_parent_id() > 0 || $product->is_type( 'grouped' ) ) { if ( $product->get_parent_id() > 0 ) { $parent = wc_get_product( $product->get_parent_id() ); $children = $parent->get_children(); @@ -1068,36 +1067,36 @@ class WC_API_Products extends WC_API_Resource { $backorders = $product->get_backorders(); } - if ( 'grouped' == $product->get_type() ) { + if ( $product->is_type( 'grouped' ) ) { $product->set_manage_stock( 'no' ); $product->set_backorders( 'no' ); - $product->set_stock( '' ); + $product->set_stock_quantity( '' ); $product->set_stock_status( $stock_status ); - } elseif ( 'external' == $product->get_type() ) { + } elseif ( $product->is_type( 'external' ) ) { $product->set_manage_stock( 'no' ); $product->set_backorders( 'no' ); - $product->set_stock( '' ); + $product->set_stock_quantity( '' ); $product->set_stock_status( 'instock' ); } elseif ( 'yes' == $managing_stock ) { $product->set_backorders( $backorders ); // Stock status is always determined by children so sync later. - if ( 'variable' !== $product->get_type() ) { + if ( ! $product->is_type( 'variable' ) ) { $product->set_stock_status( $stock_status ); } // Stock quantity if ( isset( $data['stock_quantity'] ) ) { - $product->set_stock( wc_stock_amount( $data['stock_quantity'] ) ); + $product->set_stock_quantity( wc_stock_amount( $data['stock_quantity'] ) ); } } else { // Don't manage stock. $product->set_manage_stock( 'no' ); $product->set_backorders( $backorders ); - $product->set_stock( '' ); + $product->set_stock_quantity( '' ); $product->set_stock_status( $stock_status ); } - } elseif ( 'variable' !== $product->get_type() ) { + } elseif ( ! $product->is_type( 'variable' ) ) { $product->set_stock_status( $stock_status ); } @@ -1177,7 +1176,7 @@ class WC_API_Products extends WC_API_Resource { } // Product url - if ( 'external' === $product->get_type() ) { + if ( $product->is_type( 'external' ) ) { if ( isset( $data['product_url'] ) ) { $product->set_product_url( $data['product_url'] ); } @@ -1639,25 +1638,25 @@ class WC_API_Products extends WC_API_Resource { * @return array */ private function get_images( $product ) { - - $images = $attachment_ids = array(); + $images = $attachment_ids = array(); + $product_image = $product->get_image_id(); if ( $product->is_type( 'variation' ) ) { - + // @todo variation if ( has_post_thumbnail( $product->get_variation_id() ) ) { // Add variation image if set $attachment_ids[] = get_post_thumbnail_id( $product->get_variation_id() ); - } elseif ( ! empty( $product->get_thumbnail_id() ) ) { + } elseif ( ! empty( $product_image ) ) { // Otherwise use the parent product featured image if set - $attachment_ids[] = $product->get_thumbnail_id(); + $attachment_ids[] = $product_image; } } else { // Add featured image - if ( ! empty( $product->get_thumbnail_id() ) ) { - $attachment_ids[] = $product->get_thumbnail_id(); + if ( ! empty( $product_image ) ) { + $attachment_ids[] = $product_image; } // Add gallery images @@ -1733,7 +1732,7 @@ class WC_API_Products extends WC_API_Resource { $attachment_id = $this->set_product_image_as_attachment( $upload, $product->get_id() ); } - $product->set_thumbnail_id( $attachment_id ); + $product->set_image_id( $attachment_id ); } else { $attachment_id = isset( $image['id'] ) ? absint( $image['id'] ) : 0; @@ -1752,11 +1751,11 @@ class WC_API_Products extends WC_API_Resource { } if ( ! empty( $gallery ) ) { - $product->set_gallery_attachment_ids( $gallery ); + $product->set_gallery_image_ids( $gallery ); } } else { - $product->set_thumbnail_id( '' ); - $product->set_gallery_attachment_ids( array() ); + $product->set_image_id( '' ); + $product->set_gallery_image_ids( array() ); } return $product; diff --git a/includes/api/legacy/v3/class-wc-api-products.php b/includes/api/legacy/v3/class-wc-api-products.php index e3464114a39..33ac4dac94e 100644 --- a/includes/api/legacy/v3/class-wc-api-products.php +++ b/includes/api/legacy/v3/class-wc-api-products.php @@ -207,9 +207,12 @@ class WC_API_Products extends WC_API_Resource { $product_data['grouped_products'] = $this->get_grouped_products_data( $product ); } - if ( $product->is_type( 'simple' ) && ! empty( $product->get_parent_id() ) ) { - $_product = wc_get_product( $product->get_parent_id() ); - $product_data['parent'] = $this->get_product_data( $_product ); + if ( $product->is_type( 'simple' ) ) { + $parent_id = $product->get_parent_id(); + if ( ! empty( $parent_id ) ) { + $_product = wc_get_product( $parent_id ); + $product_data['parent'] = $this->get_product_data( $_product ); + } } return array( 'product' => apply_filters( 'woocommerce_api_product_response', $product_data, $product, $fields, $this->server ) ); @@ -319,7 +322,7 @@ class WC_API_Products extends WC_API_Resource { $id = $product->get_id(); // Checks for an error in the product creation. - if ( ! $id > 0 ) { + if ( 0 >= $id ) { throw new WC_API_Exception( 'woocommerce_api_cannot_create_product', $id->get_error_message(), 400 ); } @@ -1121,12 +1124,11 @@ class WC_API_Products extends WC_API_Resource { * @return WC_Product */ private function get_product_data( $product ) { - $post = get_post( $product->get_id() ); return array( - 'title' => $product->get_title(), - 'id' => (int) $product->is_type( 'variation' ) ? $product->get_variation_id() : $product->get_id(), - 'created_at' => $this->server->format_datetime( $post->post_date_gmt ), - 'updated_at' => $this->server->format_datetime( $post->post_modified_gmt ), + 'title' => $product->get_name(), + 'id' => (int) $product->is_type( 'variation' ) ? $product->get_variation_id() : $product->get_id(), // @todo variation + 'created_at' => $this->server->format_datetime( $product->get_date_created() ), + 'updated_at' => $this->server->format_datetime( $product->get_date_modified() ), 'type' => $product->get_type(), 'status' => $product->get_status(), 'downloadable' => $product->is_downloadable(), @@ -1166,9 +1168,9 @@ class WC_API_Products extends WC_API_Resource { 'shipping_class_id' => ( 0 !== $product->get_shipping_class_id() ) ? $product->get_shipping_class_id() : null, 'description' => wpautop( do_shortcode( $product->get_description() ) ), 'short_description' => apply_filters( 'woocommerce_short_description', $product->get_short_description() ), - 'reviews_allowed' => ( 'open' === $product->get_post_data()->comment_status ), + 'reviews_allowed' => $product->get_reviews_allowed(), 'average_rating' => wc_format_decimal( $product->get_average_rating(), 2 ), - 'rating_count' => (int) $product->get_rating_count(), + 'rating_count' => $product->get_rating_count(), 'related_ids' => array_map( 'absint', array_values( wc_get_related_products( $product->get_id() ) ) ), 'upsell_ids' => array_map( 'absint', $product->get_upsell_ids() ), 'cross_sell_ids' => array_map( 'absint', $product->get_cross_sell_ids() ), @@ -1176,11 +1178,11 @@ class WC_API_Products extends WC_API_Resource { 'categories' => wp_get_post_terms( $product->get_id(), 'product_cat', array( 'fields' => 'names' ) ), 'tags' => wp_get_post_terms( $product->get_id(), 'product_tag', array( 'fields' => 'names' ) ), 'images' => $this->get_images( $product ), - 'featured_src' => (string) wp_get_attachment_url( get_post_thumbnail_id( $product->is_type( 'variation' ) ? $product->variation_id : $product->get_id() ) ), + 'featured_src' => wp_get_attachment_url( get_post_thumbnail_id( $product->is_type( 'variation' ) ? $product->variation_id : $product->get_id() ) ), 'attributes' => $this->get_attributes( $product ), 'downloads' => $this->get_downloads( $product ), - 'download_limit' => (int) $product->get_download_limit(), - 'download_expiry' => (int) $product->get_download_expiry(), + 'download_limit' => $product->get_download_limit(), + 'download_expiry' => $product->get_download_expiry(), 'download_type' => 'standard', 'purchase_note' => wpautop( do_shortcode( wp_kses_post( $product->get_purchase_note() ) ) ), 'total_sales' => $product->get_total_sales(), @@ -1415,7 +1417,7 @@ class WC_API_Products extends WC_API_Resource { $attribute_object->set_id( $attribute_id ); $attribute_object->set_name( $taxonomy ); $attribute_object->set_options( $values ); - $attribute_object->set_position( isset( $attribute['position'] ) ? (string) absint( $attribute['position'] ) : '0' ); + $attribute_object->set_position( isset( $attribute['position'] ) ? absint( $attribute['position'] ) : 0 ); $attribute_object->set_visible( ( isset( $attribute['visible'] ) && $attribute['visible'] ) ? 1 : 0 ); $attribute_object->set_variation( ( isset( $attribute['variation'] ) && $attribute['variation'] ) ? 1 : 0 ); $attributes[] = $attribute_object; @@ -1434,7 +1436,7 @@ class WC_API_Products extends WC_API_Resource { $attribute_object = new WC_Product_Attribute(); $attribute_object->set_name( $attribute['name'] ); $attribute_object->set_options( $values ); - $attribute_object->set_position( isset( $attribute['position'] ) ? (string) absint( $attribute['position'] ) : '0' ); + $attribute_object->set_position( isset( $attribute['position'] ) ? absint( $attribute['position'] ) : 0 ); $attribute_object->set_visible( ( isset( $attribute['visible'] ) && $attribute['visible'] ) ? 1 : 0 ); $attribute_object->set_variation( ( isset( $attribute['variation'] ) && $attribute['variation'] ) ? 1 : 0 ); $attributes[] = $attribute_object; @@ -1506,7 +1508,7 @@ class WC_API_Products extends WC_API_Resource { } // Update parent if grouped so price sorting works and stays in sync with the cheapest child. - if ( $product->get_parent_id() > 0 || 'grouped' === $product->get_type() ) { + if ( $product->get_parent_id() > 0 || $product->is_type( 'grouped' ) ) { if ( $product->get_parent_id() > 0 ) { $parent = wc_get_product( $product->get_parent_id() ); $children = $parent->get_children(); @@ -1554,40 +1556,40 @@ class WC_API_Products extends WC_API_Resource { $backorders = $product->get_backorders(); } - if ( 'grouped' == $product->get_type() ) { + if ( $product->is_type( 'grouped' ) ) { $product->set_manage_stock( 'no' ); $product->set_backorders( 'no' ); - $product->set_stock( '' ); + $product->set_stock_quantity( '' ); $product->set_stock_status( $stock_status ); - } elseif ( 'external' == $product->get_type() ) { + } elseif ( $product->is_type( 'external' ) ) { $product->set_manage_stock( 'no' ); $product->set_backorders( 'no' ); - $product->set_stock( '' ); + $product->set_stock_quantity( '' ); $product->set_stock_status( 'instock' ); } elseif ( 'yes' == $managing_stock ) { $product->set_backorders( $backorders ); // Stock status is always determined by children so sync later. - if ( 'variable' !== $product->get_type() ) { + if ( ! $product->is_type( 'variable' ) ) { $product->set_stock_status( $stock_status ); } // Stock quantity. if ( isset( $data['stock_quantity'] ) ) { - $product->set_stock( wc_stock_amount( $data['stock_quantity'] ) ); + $product->set_stock_quantity( wc_stock_amount( $data['stock_quantity'] ) ); } else if ( isset( $data['inventory_delta'] ) ) { $stock_quantity = wc_stock_amount( $product->get_stock() ); $stock_quantity += wc_stock_amount( $data['inventory_delta'] ); - $product->set_stock( wc_stock_amount( $stock_quantity ) ); + $product->set_stock_quantity( wc_stock_amount( $stock_quantity ) ); } } else { // Don't manage stock. $product->set_manage_stock( 'no' ); $product->set_backorders( $backorders ); - $product->set_stock( '' ); + $product->set_stock_quantity( '' ); $product->set_stock_status( $stock_status ); } - } elseif ( 'variable' !== $product->get_type() ) { + } elseif ( ! $product->is_type( 'variable' ) ) { $product->set_stock_status( $stock_status ); } @@ -1667,7 +1669,7 @@ class WC_API_Products extends WC_API_Resource { } // Product url. - if ( 'external' === $product->get_type() ) { + if ( $product->is_type( 'external' ) ) { if ( isset( $data['product_url'] ) ) { $product->set_product_url( $data['product_url'] ); } @@ -2161,8 +2163,8 @@ class WC_API_Products extends WC_API_Resource { * @return array */ private function get_images( $product ) { - - $images = $attachment_ids = array(); + $images = $attachment_ids = array(); + $product_image = $product->get_image_id(); if ( $product->is_type( 'variation' ) ) { // @todo variation @@ -2171,15 +2173,15 @@ class WC_API_Products extends WC_API_Resource { // Add variation image if set $attachment_ids[] = get_post_thumbnail_id( $product->get_variation_id() ); - } elseif ( ! empty( $product->get_thumbnail_id() ) ) { + } elseif ( ! empty( $product_image ) ) { // Otherwise use the parent product featured image if set - $attachment_ids[] = $product->get_thumbnail_id(); + $attachment_ids[] = $product_image; } } else { // Add featured image - if ( ! empty( $product->get_thumbnail_id() ) ) { - $attachment_ids[] = $product->get_thumbnail_id(); + if ( ! empty( $product_image ) ) { + $attachment_ids[] = $product_image; } // Add gallery images @@ -2256,7 +2258,7 @@ class WC_API_Products extends WC_API_Resource { $attachment_id = $this->set_product_image_as_attachment( $upload, $product->get_id() ); } - $product->set_thumbnail_id( $attachment_id ); + $product->set_image_id( $attachment_id ); } else { $attachment_id = isset( $image['id'] ) ? absint( $image['id'] ) : 0; @@ -2285,11 +2287,11 @@ class WC_API_Products extends WC_API_Resource { } if ( ! empty( $gallery ) ) { - $product->set_gallery_attachment_ids( $gallery ); + $product->set_gallery_image_ids( $gallery ); } } else { - $product->set_thumbnail_id( '' ); - $product->set_gallery_attachment_ids( array() ); + $product->set_image_id( '' ); + $product->set_gallery_image_ids( array() ); } return $product; diff --git a/includes/class-wc-product-grouped.php b/includes/class-wc-product-grouped.php index 85c8003c1c7..2f462e9cdb9 100644 --- a/includes/class-wc-product-grouped.php +++ b/includes/class-wc-product-grouped.php @@ -178,7 +178,9 @@ class WC_Product_Grouped extends WC_Product { $child_prices = array(); foreach ( $this->get_children() as $child_id ) { $child = wc_get_product( $child_id ); - $child_prices[] = $child->get_price(); + if ( $child ) { + $child_prices[] = $child->get_price(); + } } $child_prices = array_filter( $child_prices ); delete_post_meta( $this->get_id(), '_price' );