Merge pull request #8807 from franticpsyx/get_formatted_variation_attributes
get_formatted_name() produces cryptic output for variations
This commit is contained in:
commit
2816260388
|
@ -640,6 +640,86 @@ class WC_Product_Variation extends WC_Product {
|
|||
return absint( $this->variation_shipping_class_id );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get formatted variation data with WC < 2.4 back compat and proper formatting of text-based attribute names.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_formatted_variation_attributes( $flat = false ) {
|
||||
$variation_data = $this->get_variation_attributes();
|
||||
$attributes = $this->parent->get_attributes();
|
||||
$description = array();
|
||||
$return = '';
|
||||
|
||||
if ( is_array( $variation_data ) ) {
|
||||
|
||||
if ( ! $flat ) {
|
||||
$return = '<dl class="variation">';
|
||||
}
|
||||
|
||||
foreach ( $attributes as $attribute ) {
|
||||
|
||||
// Only deal with attributes that are variations
|
||||
if ( ! $attribute[ 'is_variation' ] ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$variation_selected_value = isset( $variation_data[ 'attribute_' . sanitize_title( $attribute[ 'name' ] ) ] ) ? $variation_data[ 'attribute_' . sanitize_title( $attribute[ 'name' ] ) ] : '';
|
||||
$description_name = esc_html( wc_attribute_label( $attribute[ 'name' ] ) );
|
||||
$description_value = __( 'Any', 'woocommerce' );
|
||||
|
||||
// Get terms for attribute taxonomy or value if its a custom attribute
|
||||
if ( $attribute[ 'is_taxonomy' ] ) {
|
||||
|
||||
$post_terms = wp_get_post_terms( $this->id, $attribute[ 'name' ] );
|
||||
|
||||
foreach ( $post_terms as $term ) {
|
||||
if ( $variation_selected_value === $term->slug ) {
|
||||
$description_value = apply_filters( 'woocommerce_variation_option_name', esc_html( $term->name ) );
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
$options = wc_get_text_attributes( $attribute[ 'value' ] );
|
||||
|
||||
foreach ( $options as $option ) {
|
||||
|
||||
if ( sanitize_title( $variation_selected_value ) === $variation_selected_value ) {
|
||||
if ( $variation_selected_value !== sanitize_title( $option ) ) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
if ( $variation_selected_value !== $option ) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$description_value = esc_html( apply_filters( 'woocommerce_variation_option_name', $option ) );
|
||||
}
|
||||
}
|
||||
|
||||
if ( $flat ) {
|
||||
$description[] = $description_name . ': ' . rawurldecode( $description_value );
|
||||
} else {
|
||||
$description[] = '<dt>' . $description_name . ':</dt><dd>' . rawurldecode( $description_value ) . '</dd>';
|
||||
}
|
||||
}
|
||||
|
||||
if ( $flat ) {
|
||||
$return .= implode( ', ', $description );
|
||||
} else {
|
||||
$return .= implode( '', $description );
|
||||
}
|
||||
|
||||
if ( ! $flat ) {
|
||||
$return .= '</dl>';
|
||||
}
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get product name with extra details such as SKU, price and attributes. Used within admin.
|
||||
*
|
||||
|
@ -652,8 +732,8 @@ class WC_Product_Variation extends WC_Product {
|
|||
$identifier = '#' . $this->variation_id;
|
||||
}
|
||||
|
||||
$attributes = $this->get_variation_attributes();
|
||||
$extra_data = ' – ' . implode( ', ', $attributes ) . ' – ' . wc_price( $this->get_price() );
|
||||
$formatted_attributes = $this->get_formatted_variation_attributes( true );
|
||||
$extra_data = ' – ' . $formatted_attributes . ' – ' . wc_price( $this->get_price() );
|
||||
|
||||
return sprintf( __( '%s – %s%s', 'woocommerce' ), $identifier, $this->get_title(), $extra_data );
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue