在 Woocommerce 中显示添加到购物车消息的产品变体属性
Show product variation attributes on added to cart message in Woocommerce
在 WooCommerce 中,当有人将产品添加到购物车时,会显示一条通知消息以进行确认。我不想显示父级,而是希望能够显示客户放入购物篮的变体。
我正在使用 答案中的 Andrew Schultz 代码 我猜挂钩或名称已更改,因为发生的事情是 "pa_subject" 在应该显示 [=22] 时显示=],例如。
有什么改变的想法吗?
function modify_wc_add_to_cart_message( $message, $products ) {
$attribute_label = '';
$titles = array();
$count = 0;
foreach ( $products as $product_id => $qty ) {
$product = wc_get_product( $product_id );
if( $product->is_type( 'variable' ) ) {
foreach( $product->get_variation_attributes() as $attribute_name => $attribute_values ) {
if( isset( $_REQUEST['attribute_' . strtolower( $attribute_name )] ) ) {
if( in_array( $_REQUEST['attribute_' . strtolower( $attribute_name )], $attribute_values ) ) {
if( ! empty( $attribute_label ) )
$attribute_label .= ', ';
$attribute_label .= $attribute_name . ' : ' . $_REQUEST['attribute_size'];
}
}
}
}
$titles[] = ( $qty > 1 ? absint( $qty ) . ' × ' : '' ) . sprintf( _x( '“%s”', 'Item name in quotes', 'woocommerce' ), strip_tags( get_the_title( $product_id ) ) . ( ! empty( $attribute_label ) ? ' - ' . $attribute_label : '' ) ) ;
$count += $qty;
}
$titles = array_filter( $titles );
$added_text = sprintf( _n( '%s has been added to your cart.', '%s have been added to your cart.', $count, 'woocommerce' ), wc_format_list_of_items( $titles ) );
if ( 'yes' === get_option( 'woocommerce_cart_redirect_after_add' ) ) {
$return_to = apply_filters( 'woocommerce_continue_shopping_redirect', wc_get_raw_referer() ? wp_validate_redirect( wc_get_raw_referer(), false ) : wc_get_page_permalink( 'shop' ) );
$message = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( $return_to ), esc_html__( 'Continue shopping', 'woocommerce' ), esc_html( $added_text ) );
} else {
$message = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( wc_get_page_permalink( 'cart' ) ), esc_html__( 'View cart', 'woocommerce' ), esc_html( $added_text ) );
}
return $message;
}
add_filter( 'wc_add_to_cart_message_html', 'modify_wc_add_to_cart_message', 10, 2 );
是的,启用调试时代码会抛出一些错误:
Notice: Undefined index: attribute_size in ../wp-content/themes/storefront-child/functions.php on line xxxx
基本上是这一行:
$attribute_label .= $attribute_name . ' : ' . $_REQUEST['attribute_size'];
看起来这段代码是用来处理 "size" 自定义属性的,而不是任何。
它还显示以“pa_
”开头的 woocommerce 属性 slug,而不是属性分类标签名称:
因此,要使其正常工作并显示正确的属性标签名称及其术语名称值,请使用以下重新访问的代码版本:
add_filter( 'wc_add_to_cart_message_html', 'change_add_to_cart_message', 10, 2 );
function change_add_to_cart_message( $message, $products ) {
$titles = array();
$count = 0;
foreach ( $products as $product_id => $qty ) {
// Get the WC_Product object instance
$product = wc_get_product( $product_id );
if( $product->get_type() === 'variable' ) {
$variation_attributes = array();
foreach( $product->get_variation_attributes() as $taxonomy => $terms_slugs ) {
$wc_attribute_name = wc_variation_attribute_name( $taxonomy );
if( isset( $_REQUEST[$wc_attribute_name] ) ) {
if( in_array( $_REQUEST[$wc_attribute_name], $terms_slugs ) ) {
$term_name = get_term_by( 'slug', $_REQUEST[$wc_attribute_name], $taxonomy )->name;
$variation_attributes[] = wc_attribute_label( $taxonomy ) . ': ' . $term_name;
}
}
}
$variation_attributes = implode(', ', $variation_attributes);
}
$titles[] = ( $qty > 1 ? absint( $qty ) . ' × ' : '' ) . sprintf( _x( '“%s”', 'Item name in quotes', 'woocommerce' ), strip_tags( get_the_title( $product_id ) ) . ( ! empty( $variation_attributes ) ? ' - ' . $variation_attributes : '' ) ) ;
$count += $qty;
}
$titles = array_filter( $titles );
$added_text = sprintf( _n( '%s has been added to your cart.', '%s have been added to your cart.', $count, 'woocommerce' ), wc_format_list_of_items( $titles ) );
if ( 'yes' === get_option( 'woocommerce_cart_redirect_after_add' ) ) {
$return_to = apply_filters( 'woocommerce_continue_shopping_redirect', wc_get_raw_referer() ? wp_validate_redirect( wc_get_raw_referer(), false ) : wc_get_page_permalink( 'shop' ) );
$message = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( $return_to ), esc_html__( 'Continue shopping', 'woocommerce' ), esc_html( $added_text ) );
} else {
$message = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( wc_get_page_permalink( 'cart' ) ), esc_html__( 'View cart', 'woocommerce' ), esc_html( $added_text ) );
}
return $message;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
只显示术语名称而不显示分类标签名称
在代码中替换这一行:
$variation_attributes[] = wc_attribute_label( $taxonomy ) . ': ' . $term_name;
来自这个:
$variation_attributes[] = $term_name;
你会得到类似的东西:
在 WooCommerce 中,当有人将产品添加到购物车时,会显示一条通知消息以进行确认。我不想显示父级,而是希望能够显示客户放入购物篮的变体。
我正在使用
有什么改变的想法吗?
function modify_wc_add_to_cart_message( $message, $products ) {
$attribute_label = '';
$titles = array();
$count = 0;
foreach ( $products as $product_id => $qty ) {
$product = wc_get_product( $product_id );
if( $product->is_type( 'variable' ) ) {
foreach( $product->get_variation_attributes() as $attribute_name => $attribute_values ) {
if( isset( $_REQUEST['attribute_' . strtolower( $attribute_name )] ) ) {
if( in_array( $_REQUEST['attribute_' . strtolower( $attribute_name )], $attribute_values ) ) {
if( ! empty( $attribute_label ) )
$attribute_label .= ', ';
$attribute_label .= $attribute_name . ' : ' . $_REQUEST['attribute_size'];
}
}
}
}
$titles[] = ( $qty > 1 ? absint( $qty ) . ' × ' : '' ) . sprintf( _x( '“%s”', 'Item name in quotes', 'woocommerce' ), strip_tags( get_the_title( $product_id ) ) . ( ! empty( $attribute_label ) ? ' - ' . $attribute_label : '' ) ) ;
$count += $qty;
}
$titles = array_filter( $titles );
$added_text = sprintf( _n( '%s has been added to your cart.', '%s have been added to your cart.', $count, 'woocommerce' ), wc_format_list_of_items( $titles ) );
if ( 'yes' === get_option( 'woocommerce_cart_redirect_after_add' ) ) {
$return_to = apply_filters( 'woocommerce_continue_shopping_redirect', wc_get_raw_referer() ? wp_validate_redirect( wc_get_raw_referer(), false ) : wc_get_page_permalink( 'shop' ) );
$message = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( $return_to ), esc_html__( 'Continue shopping', 'woocommerce' ), esc_html( $added_text ) );
} else {
$message = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( wc_get_page_permalink( 'cart' ) ), esc_html__( 'View cart', 'woocommerce' ), esc_html( $added_text ) );
}
return $message;
}
add_filter( 'wc_add_to_cart_message_html', 'modify_wc_add_to_cart_message', 10, 2 );
是的,启用调试时代码会抛出一些错误:
Notice: Undefined index: attribute_size in ../wp-content/themes/storefront-child/functions.php on line xxxx
基本上是这一行:
$attribute_label .= $attribute_name . ' : ' . $_REQUEST['attribute_size'];
看起来这段代码是用来处理 "size" 自定义属性的,而不是任何。
它还显示以“pa_
”开头的 woocommerce 属性 slug,而不是属性分类标签名称:
因此,要使其正常工作并显示正确的属性标签名称及其术语名称值,请使用以下重新访问的代码版本:
add_filter( 'wc_add_to_cart_message_html', 'change_add_to_cart_message', 10, 2 );
function change_add_to_cart_message( $message, $products ) {
$titles = array();
$count = 0;
foreach ( $products as $product_id => $qty ) {
// Get the WC_Product object instance
$product = wc_get_product( $product_id );
if( $product->get_type() === 'variable' ) {
$variation_attributes = array();
foreach( $product->get_variation_attributes() as $taxonomy => $terms_slugs ) {
$wc_attribute_name = wc_variation_attribute_name( $taxonomy );
if( isset( $_REQUEST[$wc_attribute_name] ) ) {
if( in_array( $_REQUEST[$wc_attribute_name], $terms_slugs ) ) {
$term_name = get_term_by( 'slug', $_REQUEST[$wc_attribute_name], $taxonomy )->name;
$variation_attributes[] = wc_attribute_label( $taxonomy ) . ': ' . $term_name;
}
}
}
$variation_attributes = implode(', ', $variation_attributes);
}
$titles[] = ( $qty > 1 ? absint( $qty ) . ' × ' : '' ) . sprintf( _x( '“%s”', 'Item name in quotes', 'woocommerce' ), strip_tags( get_the_title( $product_id ) ) . ( ! empty( $variation_attributes ) ? ' - ' . $variation_attributes : '' ) ) ;
$count += $qty;
}
$titles = array_filter( $titles );
$added_text = sprintf( _n( '%s has been added to your cart.', '%s have been added to your cart.', $count, 'woocommerce' ), wc_format_list_of_items( $titles ) );
if ( 'yes' === get_option( 'woocommerce_cart_redirect_after_add' ) ) {
$return_to = apply_filters( 'woocommerce_continue_shopping_redirect', wc_get_raw_referer() ? wp_validate_redirect( wc_get_raw_referer(), false ) : wc_get_page_permalink( 'shop' ) );
$message = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( $return_to ), esc_html__( 'Continue shopping', 'woocommerce' ), esc_html( $added_text ) );
} else {
$message = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( wc_get_page_permalink( 'cart' ) ), esc_html__( 'View cart', 'woocommerce' ), esc_html( $added_text ) );
}
return $message;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
只显示术语名称而不显示分类标签名称
在代码中替换这一行:
$variation_attributes[] = wc_attribute_label( $taxonomy ) . ': ' . $term_name;
来自这个:
$variation_attributes[] = $term_name;
你会得到类似的东西: