【问题标题】:Show product variation in woocommerce Added to cart message在 woocommerce 中显示产品变体已添加到购物车消息
【发布时间】:2018-08-01 16:30:52
【问题描述】:

在我的 WooCommerce 商店中,当将可变产品添加到购物车时,我让用户停留在产品页面上。

成功通知消息显示产品标题和通用附件,但我希望它在通知中显示产品标题的变体,如下所示:

“男士外套 - 尺码:小”已添加到您的购物车。

而不是:

“男士外套”已添加到您的购物车。

当前运行 WooCommerce 3.3.1 和 WP 4.9。

谢谢

【问题讨论】:

    标签: php wordpress woocommerce variations


    【解决方案1】:

    此代码是动态的,因此适用于添加到可变产品的任意数量的属性。它将照常处理简单的产品。

    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 );
    

    【讨论】:

      【解决方案2】:

      上面的代码有一个错误,它引用了“attribute_size”——它适用于 OP,因为它实际上是变量的名称,但如果你将它用于其他任何东西,则需要整行:

      $attribute_label .= $attribute_name . ' : ' . $_REQUEST['attribute_' . strtolower( $attribute_name )];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-05
        • 2014-11-21
        • 1970-01-01
        相关资源
        最近更新 更多