微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WooCommerce中特定运输类别的购物车消息

如何解决WooCommerce中特定运输类别的购物车消息

我正在尝试为特定的运输类别添加购物车消息。根据{{​​3}}的答案改编而成,这是我的代码尝试:

add_action( 'woocommerce_before_calculate_totals','cart_items_shipping_class_message',20,1 );
function cart_items_shipping_class_message( $cart ){
    if ( is_admin() && ! defined('DOING_AJAX') )
        return;
    
    $shipping_class = '150';
   
    // Loop through cart items
    foreach( $cart->get_cart() as $cart_item ){
        
        if( $cart_item['data']->get_shipping_class() === $shipping_class ){
        wc_clear_notices();
                
        wc_add_notice( sprintf( 'Beers can only be shipped via <a title="Pallet Shiping" href="/shipping-delivery/#Pallet_Shipping" target="_blank" rel="noopener noreferrer">Pallet Shiping</a>. To reveal much cheaper UPS Shipping Rates,remove Beers from the Cart.'),'notice' );
        }
    }
}

但是它似乎没有用。有什么想法吗?

解决方法

在您的情况下,您似乎已经在问题代码中定义了运输类别ID ,因此您需要使用WC_Product get_shipping_class_id()方法,如下所示:

add_action( 'woocommerce_before_calculate_totals','cart_items_shipping_class_message',20,1 );
function cart_items_shipping_class_message( $cart ){

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    $shipping_class_id = '150'; // Your shipping class Id

    // Loop through cart items
    foreach( $cart->get_cart() as $cart_item ){
        // Check cart items for specific shipping class,displaying a notice
        if( $cart_item['data']->get_shipping_class_id() == $shipping_class_id ){
            wc_clear_notices();
            wc_add_notice( sprintf(
                __('Beers can only be shipped via %s. To reveal much cheaper UPS Shipping Rates,remove Beers from the Cart.','woocommerce'),'<a title="Pallet Shipping" href="/shipping-delivery/#Pallet_Shipping" target="_blank" rel="noopener noreferrer">' . __("Pallet Shipping","woocommerce") . '</a>'
            ),'notice' );
            break;
        }
    }
}

代码进入活动子主题(或活动主题)的functions.php文件中。应该可以。


添加:要仅在购物车页面上显示通知,请替换以下代码:

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

由此:

    if ( ! is_cart() || ( is_admin() && ! defined( 'DOING_AJAX' ) ) )
        return;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。