WordPress插件woocommerce如何在结账前检查SESSION的值?

导语:叶子最近在写一些woocommerce代码,利用woocommerce来搭建一个虚拟商品的商城,其中有一些虚拟商品需要利用SESSION来传送用户的一些选择值,并希望在用户结账前对SESSION的值进行检查,如果空值或失效就不进入订单环节。

如何开始SESSION

在php中开始SESSION很简单,如下面的例子来做就可以了。记住的是,在每个需要使用的SESSION的文件中,都应该有session_start()来表示SESSION的开始。叶子在这里只是简单说一说。

Session_Start();
$_SESSION["name"]="value";

name是你定义的变量名,value是你给变量赋的值。

SESSION是空值

如果SESSION是空值,woocommerce在进入结账页面时清空购物车商品,并跳转到自定义的页面。

function redirect_expert_before_checkout() {

    global $woocommerce;
    $cart = $woocommerce->cart;
    session_start();
   	foreach ( $cart->get_cart() as $cart_item_key_cart => $cart_item ) {
		$id_product = $cart_item['product_id'];
		
		if ($id_product == 112 && empty($_SESSION['name']) && empty($_SESSION['gen']) ) {
       $cart->remove_cart_item($cart_item_key_cart);
		 	 wp_redirect('http://wordpressleaf.com/test-name');
		  }
    }
}

add_action( 'woocommerce_checkout_billing', 'redirect_expert_before_checkout' );

强调一下,这次用到的HOOK是woocommerce_checkout_billing。如果大家对购物车感兴趣,可以去看看这篇文章,如何在woocommerce中向购物车添加商品时先清空购物车后再添加商品

SESSION失效

如果用户开始获得了SESSION的值,进入结账页面后离开太久导致SESSION失效,那么点击结算时清空购物车商品,woocommerce会有错误提示。

function expert_before_checkout_process() {

    global $woocommerce;
     $cart = $woocommerce->cart;
    session_start();
   	foreach ( $cart->get_cart() as $cart_item_key_cart => $cart_item ) {
		$id_product = $cart_item['product_id'];
		
		if ($id_product == 113 && empty($_SESSION['name']) && empty($_SESSION['gen']) ) {
       $cart->remove_cart_item($cart_item_key_cart);
		  }
    }
}

add_action( 'woocommerce_before_checkout_process', 'expert_before_checkout_process' );

强调一下,这次用到的HOOK是woocommerce_before_checkout_process,这是结账前的处理HOOK。

结束

这两个woocommerce的action,大家学会了吗?如果需要更多的文档,大家可以去看看woocommerce 的hook 官方文档页面:https://docs.woocommerce.com/wc-apidocs/hook-docs.html。

发表评论

邮箱地址不会被公开。 必填项已用*标注