WC_Product_Variable_Data_Store_CPT::read_variation_attributes()
Loads an array of attributes used for variations, as well as their possible values.
Method of the class: WC_Product_Variable_Data_Store_CPT{}
No Hooks.
Return
Array
.
Usage
$WC_Product_Variable_Data_Store_CPT = new WC_Product_Variable_Data_Store_CPT(); $WC_Product_Variable_Data_Store_CPT->read_variation_attributes( $product );
- $product(WC_Product) (required) (passed by reference — &)
- Product object.
WC_Product_Variable_Data_Store_CPT::read_variation_attributes() WC Product Variable Data Store CPT::read variation attributes code WC 9.4.2
public function read_variation_attributes( &$product ) { global $wpdb; $variation_attributes = array(); $attributes = $product->get_attributes(); $child_ids = $product->get_children(); $cache_key = WC_Cache_Helper::get_cache_prefix( 'product_' . $product->get_id() ) . 'product_variation_attributes_' . $product->get_id(); $cache_group = 'products'; $cached_data = wp_cache_get( $cache_key, $cache_group ); if ( false !== $cached_data ) { return $cached_data; } if ( ! empty( $attributes ) ) { foreach ( $attributes as $attribute ) { if ( empty( $attribute['is_variation'] ) ) { continue; } // Get possible values for this attribute, for only visible variations. if ( ! empty( $child_ids ) ) { $format = array_fill( 0, count( $child_ids ), '%d' ); $query_in = '(' . implode( ',', $format ) . ')'; $query_args = array( 'attribute_name' => wc_variation_attribute_name( $attribute['name'] ) ) + $child_ids; $values = array_unique( $wpdb->get_col( $wpdb->prepare( "SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key = %s AND post_id IN {$query_in}", // @codingStandardsIgnoreLine. $query_args ) ) ); } else { $values = array(); } // Empty value indicates that all options for given attribute are available. if ( in_array( null, $values, true ) || in_array( '', $values, true ) || empty( $values ) ) { $values = $attribute['is_taxonomy'] ? wc_get_object_terms( $product->get_id(), $attribute['name'], 'slug' ) : wc_get_text_attributes( $attribute['value'] ); // Get custom attributes (non taxonomy) as defined. } elseif ( ! $attribute['is_taxonomy'] ) { $text_attributes = wc_get_text_attributes( $attribute['value'] ); $assigned_text_attributes = $values; $values = array(); // Pre 2.4 handling where 'slugs' were saved instead of the full text attribute. if ( version_compare( get_post_meta( $product->get_id(), '_product_version', true ), '2.4.0', '<' ) ) { $assigned_text_attributes = array_map( 'sanitize_title', $assigned_text_attributes ); foreach ( $text_attributes as $text_attribute ) { if ( in_array( sanitize_title( $text_attribute ), $assigned_text_attributes, true ) ) { $values[] = $text_attribute; } } } else { foreach ( $text_attributes as $text_attribute ) { if ( in_array( $text_attribute, $assigned_text_attributes, true ) ) { $values[] = $text_attribute; } } } } $variation_attributes[ $attribute['name'] ] = array_unique( $values ); } } wp_cache_set( $cache_key, $variation_attributes, $cache_group ); return $variation_attributes; }