导语:叶子最近在写一些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。