[API] Show and use slug for attributes in products endpoint, closes #6537

This commit is contained in:
Claudio Sanches 2015-01-13 13:24:28 -02:00
parent 2d768f9553
commit ecf7bd9f9a
1 changed files with 25 additions and 12 deletions

View File

@ -206,13 +206,13 @@ class WC_API_Products extends WC_API_Resource {
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 );
}
// enable description html tags.
$post_content = ( isset( $data['enable_html_description'] ) && 'true' === $data['enable_html_description'] ) ? $data['description'] : wc_clean( $data['description'] );
// enable short description html tags.
$post_excerpt = ( isset( $data['enable_html_short_description'] ) && 'true' === $data['enable_html_short_description'] ) ? $data['short_description'] : wc_clean( $data['short_description'] );
$new_product = array(
'post_title' => wc_clean( $data['title'] ),
'post_status' => ( isset( $data['status'] ) ? wc_clean( $data['status'] ) : 'publish' ),
@ -729,13 +729,20 @@ class WC_API_Products extends WC_API_Resource {
$attributes = array();
foreach ( $data['attributes'] as $attribute ) {
$is_taxonomy = 0;
$is_taxonomy = 0;
$taxonomy = 0;
if ( ! isset( $attribute['name'] ) ) {
continue;
}
$taxonomy = $this->get_attribute_taxonomy_by_label( $attribute['name'] );
$attribute_slug = sanitize_title( $attribute['name'] );
if ( isset( $attribute['slug'] ) ) {
$taxonomy = $this->get_attribute_taxonomy_by_slug( $attribute['slug'] );
$attribute_slug = sanitize_title( $attribute['slug'] );
}
if ( $taxonomy ) {
$is_taxonomy = 1;
}
@ -785,7 +792,7 @@ class WC_API_Products extends WC_API_Resource {
}
// Custom attribute - Add attribute to array and set the values
$attributes[ sanitize_title( $attribute['name'] ) ] = array(
$attributes[ $attribute_slug ] = array(
'name' => wc_clean( $attribute['name'] ),
'value' => $values,
'position' => isset( $attribute['position'] ) ? absint( $attribute['position'] ) : 0,
@ -1327,12 +1334,16 @@ class WC_API_Products extends WC_API_Resource {
$updated_attribute_keys = array();
foreach ( $variation['attributes'] as $attribute_key => $attribute ) {
$taxonomy = '';
if ( ! isset( $attribute['name'] ) ) {
continue;
}
$taxonomy = $this->get_attribute_taxonomy_by_label( $attribute['name'] );
if ( isset( $attribute['slug'] ) ) {
$taxonomy = $this->get_attribute_taxonomy_by_slug( $attribute['slug'] );
}
if ( isset( $attributes[ $taxonomy ] ) ) {
$_attribute = $attributes[ $taxonomy ];
} elseif ( isset( $attributes[ strtolower( $attribute['name'] ) ] ) ) {
@ -1370,7 +1381,7 @@ class WC_API_Products extends WC_API_Resource {
continue;
}
$taxonomy = $this->get_attribute_taxonomy_by_label( $default_attr['name'] );
$taxonomy = $this->get_attribute_taxonomy_by_slug( $default_attr['name'] );
if ( isset( $attributes[ $taxonomy ] ) ) {
$_attribute = $attributes[ $taxonomy ];
@ -1479,18 +1490,18 @@ class WC_API_Products extends WC_API_Resource {
}
/**
* Get attribute taxonomy by label.
* Get attribute taxonomy by slug.
*
* @since 2.2
* @param string $label
* @return string|null
*/
private function get_attribute_taxonomy_by_label( $label ) {
private function get_attribute_taxonomy_by_slug( $slug ) {
$taxonomy = null;
$attribute_taxonomies = wc_get_attribute_taxonomies();
foreach ( $attribute_taxonomies as $key => $tax ) {
if ( $label == $tax->attribute_label ) {
if ( $slug == $tax->attribute_label ) {
$taxonomy = 'pa_' . $tax->attribute_name;
break;
@ -1749,7 +1760,8 @@ class WC_API_Products extends WC_API_Resource {
// taxonomy-based attributes are prefixed with `pa_`, otherwise simply `attribute_`
$attributes[] = array(
'name' => ucwords( str_replace( 'attribute_', '', str_replace( 'pa_', '', $attribute_name ) ) ),
'name' => wc_attribute_label( str_replace( 'attribute_', '', $attribute_name ) ),
'slug' => str_replace( 'attribute_', '', str_replace( 'pa_', '', $attribute_name ) ),
'option' => $attribute,
);
}
@ -1766,7 +1778,8 @@ class WC_API_Products extends WC_API_Resource {
}
$attributes[] = array(
'name' => ucwords( str_replace( 'pa_', '', $attribute['name'] ) ),
'name' => wc_attribute_label( $attribute['name'] ),
'slug' => str_replace( 'pa_', '', $attribute['name'] ),
'position' => $attribute['position'],
'visible' => (bool) $attribute['is_visible'],
'variation' => (bool) $attribute['is_variation'],