从 Woocommerce 中的 url 变量添加购物车费用

Add a cart fee from an url variable in Woocommerce

对于 Woocommerce,this website 有两种类型的产品按钮:

  1. 加入购物袋并
  2. 联系我们订购。

当点击 "Contact us to order" 按钮时,访问者将被重定向到 "Contact us to order" 页面中的联系表单。此联系表格是使用 Contact form 7 插件构建的。

对于某些产品,联系表有一个专用的复选框字段,他们可以在其中选择衬里。根据他们选择的衬里,我将访问者重定向到结帐页面,并通过 URL.

传递一些值

例如:https://milanshopping.co.uk/checkout/?val=15

并且在 functions.php 文件中,我使用了以下代码:

 add_action( 'woocommerce_cart_calculate_fees','milanshopping_add_lining_fees' ); 
 function milanshopping_add_lining_fees() { 
     if ( is_admin() && ! defined( 'DOING_AJAX' ) )
         return;

    if(isset($_GET['val'])){

        if($_GET['val'] == 15){
            $leather_fee = 15;
        }else{
            $leather_fee = 20;  
        } 

    }

    if($leather_fee != 0 ){
        WC()->cart->add_fee( 'Leather fee', $leather_fee);        
    }    

}

但是即使存在 $_GET 值,也无法添加费用。我已经通过调用 echo $_GET['val'] 进行了检查,并且打印了值。

但是如果我在 if 语句之外添加以下代码,

WC()->cart->add_fee( 'Leather fee', $leather_fee);

尽管添加的费用为 0 而不是我尝试从 $_GET 值生成的费用,但它仍然有效。任何的想法?

使用联系表 7 dom 事件 "wpcf7submit" 从联系我们重定向到订购页面到结帐页面,并使用单独的功能将产品添加到购物车。

更新:您需要先在会话中获取查询的 url 变量值,这样:

add_action( 'template_redirect', 'grab_fee_query_var' );
function grab_fee_query_var() {
    session_start();

    // Not on checkout page
    if( ! is_admin() && isset($_GET['val']) ) {
        $_SESSION['leather_fee'] = $_GET['val'];
        WC()->session->__unset('leather_fee');
    }
}

add_action( 'woocommerce_cart_calculate_fees','add_custom_cart_fee' );
function add_custom_cart_fee() {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if(isset($_SESSION['leather_fee']) && ! WC()->session->__isset('leather_fee') ){
        $value = $_SESSION['leather_fee'] == 15 ? 15 : 20;
        WC()->session->set('leather_fee', $value );
    }

    if( WC()->session->__isset('leather_fee') ) {
       $leather_fee = WC()->session->get('leather_fee');
       WC()->cart->add_fee( 'Leather fee', $leather_fee);
    }
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。