Automattic\WooCommerce\Internal\ProductVariations
SelectedVariationName::get_product_name │ public │ WC 11.2.0
Gets a variation product name using selected variation attributes from cart or checkout context.
Method of the class: SelectedVariationName{}
Returns
string.
Usage
$SelectedVariationName = new SelectedVariationName();
$SelectedVariationName->get_product_name( $product, $variation_attributes, $filter_custom_attributes ): string;
- $product(WC_Product) (required)
- Variation product.
- $variation_attributes(array<string, mixed>) (required)
- Selected variation attributes.
- $filter_custom_attributes(true|false)
- Whether to filter custom attribute values for cart display.
Default: false
Changelog
SelectedVariationName::get_product_name() SelectedVariationName::get product name code
WC 11.2.1
public function get_product_name( WC_Product $product, array $variation_attributes, bool $filter_custom_attributes = false ): string {
if ( ! $product->is_type( ProductType::VARIATION ) || empty( $variation_attributes ) ) {
return $product->get_name();
}
$product_name = $product->get_name();
$product_attributes = (array) $product->get_attributes();
if ( ! in_array( '', $product_attributes, true ) ) {
return $product_name;
}
$data_store = $product->get_data_store();
// Stores without the shared title policy keep the stored variation name.
if ( ! $data_store instanceof WC_Data_Store || ! $data_store->has_callable( 'should_include_attributes_in_title' ) ) {
return $product_name;
}
// @phpstan-ignore method.notFound (the call is proxied by WC_Data_Store::__call() and guarded by has_callable() above)
if ( ! $data_store->should_include_attributes_in_title( $product ) ) {
return $product_name;
}
$selected_attributes = array();
foreach ( $variation_attributes as $name => $value ) {
$selected_attributes[ str_replace( 'attribute_', '', rawurldecode( (string) $name ) ) ] = $value;
}
$missing_attributes = array();
$missing_display = array();
$has_attributes_in_name = false;
foreach ( $product_attributes as $name => $value ) {
if ( ! array_key_exists( $name, $selected_attributes ) || ! is_scalar( $selected_attributes[ $name ] ) ) {
continue;
}
$selected_value = (string) $selected_attributes[ $name ];
$display_value = wc_get_formatted_variation( array( $name => $selected_value ), true, false );
if ( '' === $display_value ) {
continue;
}
if ( wc_is_attribute_in_product_name( $display_value, $product_name ) ) {
$has_attributes_in_name = true;
continue;
}
if ( '' !== (string) $value ) {
continue;
}
$missing_attributes[ $name ] = $selected_value;
if ( $filter_custom_attributes && ! taxonomy_exists( $name ) ) {
/**
* Filters the display name for a selected variation option.
*
* @since 3.4.0
* @param string $value Selected variation option value.
* @param WP_Term|null $term Term object when available.
* @param string $name Attribute taxonomy name.
* @param WC_Product|null $product Product object.
*/
$display_value = apply_filters( 'woocommerce_variation_option_name', $selected_value, null, wc_attribute_taxonomy_name( 'attribute_' . $name ), $product );
$display_value = is_scalar( $display_value ) ? rawurldecode( (string) $display_value ) : '';
}
if ( '' !== $display_value ) {
$missing_display[] = $display_value;
}
}
if ( empty( $missing_attributes ) ) {
return $product_name;
}
if ( $has_attributes_in_name ) {
$separator = ', ';
} else {
/**
* Filters the separator used between a variation product title and its attributes.
*
* @since 3.0.2
* @param string $separator Separator between the product title and attributes.
* @param WC_Product $product Variation product object.
*/
$separator = apply_filters( 'woocommerce_product_variation_title_attributes_separator', ' - ', $product );
$separator = is_scalar( $separator ) ? (string) $separator : ' - ';
}
$missing_values = implode( ', ', $missing_display );
if ( '' === $missing_values ) {
return $product_name;
}
return $product_name . $separator . $missing_values;
}