Merge pull request #5766 from claudiosmweb/improved-products-api

Improved the image upload and fixed the variable products in Products API
This commit is contained in:
Mike Jolley 2014-07-01 09:14:57 +01:00
commit 9dce04ce20
1 changed files with 61 additions and 21 deletions

View File

@ -1002,7 +1002,7 @@ class WC_API_Products extends WC_API_Resource {
if ( ! $variation_id ) { if ( ! $variation_id ) {
$post_status = ( isset( $variation['visible'] ) && false === $variation['visible'] ) ? 'private' : 'publish'; $post_status = ( isset( $variation['visible'] ) && false === $variation['visible'] ) ? 'private' : 'publish';
$variation = array( $new_variation = array(
'post_title' => $variation_post_title, 'post_title' => $variation_post_title,
'post_content' => '', 'post_content' => '',
'post_status' => $post_status, 'post_status' => $post_status,
@ -1012,7 +1012,7 @@ class WC_API_Products extends WC_API_Resource {
'menu_order' => $menu_order 'menu_order' => $menu_order
); );
$variation_id = wp_insert_post( $variation ); $variation_id = wp_insert_post( $new_variation );
do_action( 'woocommerce_create_product_variation', $variation_id ); do_action( 'woocommerce_create_product_variation', $variation_id );
} else { } else {
@ -1194,10 +1194,11 @@ class WC_API_Products extends WC_API_Resource {
} }
// Update taxonomies // Update taxonomies
if ( $variation['attributes'] ) { if ( isset( $variation['attributes'] ) ) {
$updated_attribute_keys = array(); $updated_attribute_keys = array();
foreach ( $variation['attributes'] as $attribute_key => $attribute ) { foreach ( $variation['attributes'] as $attribute_key => $attribute ) {
if ( ! isset( $attribute['name'] ) ) { if ( ! isset( $attribute['name'] ) ) {
continue; continue;
} }
@ -1456,25 +1457,45 @@ class WC_API_Products extends WC_API_Resource {
* @return void|WP_Error * @return void|WP_Error
*/ */
protected function save_product_images( $id, $images ) { protected function save_product_images( $id, $images ) {
foreach ( $images as $image ) { if ( is_array( $images ) ) {
if ( isset( $image['position'] ) && isset( $image['src'] ) && $image['position'] == 0 ) { $gallery = array();
$upload = $this->upload_product_image( wc_clean( $image['src'] ) );
if ( is_wp_error( $upload ) ) { foreach ( $images as $image ) {
return new WP_Error( 'woocommerce_api_cannot_upload_product_image', $upload->get_error_message(), array( 'status' => 400 ) ); if ( isset( $image['position'] ) && $image['position'] == 0 ) {
$attachment_id = isset( $image['id'] ) ? absint( $image['id'] ) : 0;
if ( 0 === $attachment_id && isset( $image['src'] ) ) {
$upload = $this->upload_product_image( wc_clean( $image['src'] ) );
if ( is_wp_error( $upload ) ) {
return new WP_Error( 'woocommerce_api_cannot_upload_product_image', $upload->get_error_message(), array( 'status' => 400 ) );
}
$attachment_id = $this->set_product_image_as_attachment( $upload, $id );
}
set_post_thumbnail( $id, $attachment_id );
} else {
$attachment_id = isset( $image['id'] ) ? absint( $image['id'] ) : 0;
if ( 0 === $attachment_id && isset( $image['src'] ) ) {
$upload = $this->upload_product_image( wc_clean( $image['src'] ) );
if ( is_wp_error( $upload ) ) {
return new WP_Error( 'woocommerce_api_cannot_upload_product_image', $upload->get_error_message(), array( 'status' => 400 ) );
}
}
$gallery[] = $this->set_product_image_as_attachment( $upload, $id );
} }
$attachment_id = $this->set_product_image_as_attachment( $upload, $id );
set_post_thumbnail( $id, $attachment_id );
} else if ( isset( $image['src'] ) ) {
$upload = $this->upload_product_image( wc_clean( $image['src'] ) );
if ( is_wp_error( $upload ) ) {
return new WP_Error( 'woocommerce_api_cannot_upload_product_image', $upload->get_error_message(), array( 'status' => 400 ) );
}
$this->set_product_image_as_attachment( $upload, $id );
} }
if ( ! empty( $gallery ) ) {
update_post_meta( $id, '_product_image_gallery', implode( ',', $gallery ) );
}
} else {
delete_post_thumbnail( $id );
update_post_meta( $id, '_product_image_gallery', '' );
} }
} }
@ -1550,12 +1571,31 @@ class WC_API_Products extends WC_API_Resource {
* @return int * @return int
*/ */
protected function set_product_image_as_attachment( $upload, $id ) { protected function set_product_image_as_attachment( $upload, $id ) {
$info = wp_check_filetype( $upload['file'] ); $info = wp_check_filetype( $upload['file'] );
$title = '';
$content = '';
if ( $image_meta = @wp_read_image_metadata( $upload['file'] ) ) {
if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) {
$title = $image_meta['title'];
}
if ( trim( $image_meta['caption'] ) ) {
$content = $image_meta['caption'];
}
}
$attachment = array( $attachment = array(
'guid' => $upload['url'],
'post_mime_type' => $info['type'], 'post_mime_type' => $info['type'],
'guid' => $upload['url'],
'post_parent' => $id,
'post_title' => $title,
'post_content' => $content
); );
$attachment_id = wp_insert_attachment( $attachment, $upload['file'], $id ); $attachment_id = wp_insert_attachment( $attachment, $upload['file'], $id );
if ( ! is_wp_error( $attachment_id ) ) {
wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $upload['file'] ) );
}
return $attachment_id; return $attachment_id;
} }