!
也想出现在这里? 联系我们
广告位

WooCommerce购物车对象使用以及方法函数概括

WooCommerce 二次开发中,经常会需要对购物车进行改造,甚至有时候会需要重写购物车页面,所以就有必要把 WooCommerce 的购物车提供的接口方法做一下整理。本文对我在最近的一些项/ _ F n } e 3 %目中使用过的方法进行简要的记录。

首先` G a S :,在调用任何购物L [ C + 4 f车方法之前,先要检查当前页面环境对购物车对象是否可用:

  1. if ( is_null( WC()->cart ) ) {
  2. wc_load_cart();
  3. }
  4. WC()->cart->get_cart();

常用的条件函数,返回 true/false

  1. //检查购物车是否有商品
  2. WC()->cart->is_empty(m u 4 j A 0);
  3. //检查购物车是否需q ) k ( \ r : ( \要付费,如果费用为0则返回false
  4. WC()-&gtH . 0 6 K `;cart-Q 2 x l v ; D>neB 8 M l F | u l Beds_pas d A v % \ rymenK , 7 0 * Lt();
  5. //检查购物车中是否已经记录收货地址
  6. WC()->cart->show_shipping()- I Y c o 7;
  7. //检查是不是需要寄送(用于计算运费的情况)
  8. WC()->cart->needs_shipping();
  9. //检查是不是有折扣,如果后台减了价格,这里会返回true
  10. WC()->ck R % e p O yart->has_discount();

获取数据

  1. /* Author: Brain - blog.brain1981.com */
  2. //返回购物车商品总数
  3. WC3 * v p ! H r R ]()-&Z . Q e m n B n tgt;cart->get_cart_contents_count();
  4. //返回购物车小计
  5. WC()->cart->get_cart_subtotal();
  6. //返回总运费
  7. WC()->cart->get_shipping3 u , / D_total();
  8. //返回使用的优惠券,返回数组,内容包含优惠券对象和优惠码
  9. WC()->cart->get_coupons();
  10. //返回使用的优惠券,返回数组,内容仅包含优惠码
  11. WC()->card } g X 9t->get_applied_coupons();
  12. 返回指定优惠码在当前购物车中获得的折扣金额
  13. WC()->cart->get_cO . \ ^ W 2 # & uoupon_discount_amount( 'coupon_code' );
  14. //返回总折扣金额,这俩其实等于同一个方法
  15. WC()->cart->get_discount_total();
  16. WC()->cart-&c C ! * 2 T } l Cgt;get_cart_discount_total();
  17. //返回购物_ ? X t车总金额,包含了折扣和运费
  18. WC(3 o 8)->cart->get_total();
  19. WC()->cart-&2 s B A V \ J 7 ygt;tota;

获取用户的地址信息

  1. /* Aut: @ ihor: Brain - blog.brain1981.C g = Xcom */
  2. //获取用户对象
  3. WC()->cart->get_customer();
  4. //获取用户的地址信息
  5. WC()->cart->get_customer()->get_billi* B Lng_first_name();W S H m w / C w
  6. WC()->cart->get_customer()->get_billing_last_name(), E K e a 8 o e *;
  7. WC()->cart-&= 6 9 G W Ggt;get_customer()->get_billing_company();
  8. WC()->cart->gx 7 |et_customer()->get_billing_email();
  9. WC()->cart-&gt^ 3 F;get_customer()->get_billing_phone();
  10. WC()->cart->get_customer()->get_biD K s 7 S q I olling_country();
  11. WC()->cart->get_cusB W Vtomer()->get_billing_state(% i L);
  12. WC()->( ( B j Gcart->get_customer()-&gt_ Z } 2 B ^ n o;get_billing_postcode();
  13. WC()T ] V 4 \ $-&gS c o `t;cart->get_customer()Y c r ~ A ; g H->get_billing_city();
  14. WC()->cart->get_customer()->g. $ T .et_billing_address();
  15. WC()-&gu W 2t;cart->get_customer()->get_billing_addN T k x {ress_2();
  16. WC()->cart->get_customer()->get_ship% 9 * L U O t q gping_first_name();
  17. WC(= V ; p } I e)->ca_ 5 U ]rt->get_customer()->get_shipping_last_na: d ( E V ) Dme();
  18. WC()->cart->get_customer()->get_shipping_company()z q D = K -;
  19. WC()->cart->get_customer()->get_shipping_country();
  20. WC()->cart->get_custos C ( % K % =mer()->get_Q G z e 7 z cshipping_state();
  21. WC()-% O `>cart->gv P /et_customer()->get_shipping_postcode();
  22. WC()->cart->get_customer()->get_shipping_city();
  23. WC()->cart->get_customer()->get_shipping_address();
  24. WC()-&gt7 V d N b : k;o ] ycart-&O [ & : c g W $ 1gt;get_customer()->get_shipping5 2 / $ ? O a z_address_2();

常用方法

  1. /* Author: Brain - blog.brain1981.com */
  2. //添加指定的产品到购物车,如果是添加普通产品只需# N [ } \ 9 e要$product_id和$quanti] O ^ : } P = uty即可,添加可变产品比较复杂,会另外写博客介绍
  3. WC()->cart->add_to_cart( $product_id, $qm z _ Wuantity, $variation_id, $variation);
  4. //修改购物车中商品的数量
  5. WC()->cart->set_quantity( $item_key, $quantity );
  6. //删除购物车中的商品
  7. WC()->cart->remove_cart_item( $item_key );
  8. //使用优惠券,参L U v f数就是优惠码
  9. WC()->cartM $ ( W Y |->apply_coupon( $coupon_code );
  10. //删除优惠券,参数也是优惠码
  11. WC()->cart->remove_coupon(K n : ) o N x $coupon_code );
  12. //删除所有的优惠券f ? Y A d w 1
  13. WC()->car` F ^ , I l L o .t->re$ N n ( g pmove_coupons();
  14. //重新计算购物车价格
  15. WC()->cart->calcul& = ] I ` fate/ u l O w_to: G b j e 4tals();

方法中,有一些注意点,add_to_cart、set_quantity 以及 remove_cart_item,这些对商品增减的方法执行后,购物车会自动调用 calculate_totals 计算价格。但 apply_coupon 和 remove_coupon 这些对优惠券的方法执行后,需要自己执行一遍 calculate_totals 计算价格。

此外,set_quantity 和 remove_cart_item 的参数$item_key,是当前购物车中商品对应的键值,这些键是通过 JSON 格式存储的,需要通过 WooCommerce 自己封装的方法获取:
对于普通商品,已知$product_id,_ $ E / \ : &可通过以下方法获得$item_key

  1. $product_cart_id = WC()->cart->generate_cart_id( $product_id );
  2. $item_key = WC()-&gt0 v g %;cart-/ v 8 V 7 C M 8 ;>find_product_iR k P * & a $n_cart( $product_cart_id );

对可变商品,_ g e q Y i ~已知$variation_id,则是通过遍历方法获取

  1. /*9 H | M Y J T Author: Brain - blog.brain1981.com */
  2. foreach ( WC()N 0 _ \ K o o b w->cart->get_cart() as $item_key => $i\ W Q S t T n (te% R T L E @ J Um ) {
  3. //a v F X + j - { If the! T V 5 v targeted variation id is in cart
  4. i? O P H 7 # s % tf ( $item['variation_id'] == $variation_id )H U a F; {
  5. $item_key ...
  6. break;
  7. }
  8. }

通过以上总| N J结的常用方法组合,我们大致就可以开发出自己的购物车程序了,列举一个常用的列出购物车商品清单[ f m : ; E v Q的函数:

  1. /* Author: Brain - blog.bv [ ! x = o D 6 Lrain1981.com */
  2. function brain1981_rest_wc_cart_list($request = null) {
  3. if ( is_null( WC()-&L 3 * 4 K G )gt+ o R r;cart ) ) {
  4. wc_load_cart();
  5. }
  6. WC()->cart-&U C 5 ) Q [gt;get_cart();
  7. $resaults = [];
  8. if( WC()->cart->isz U o ) q : d ;_empty() ){//如果没有物品则直接返回
  9. reC t & l ? l - @ Mturn $resaults;
  10. }
  11. foreach # \ I t - p (0; WC()->cart->get_: ] = A # - [carC U C w 8 {t() as $cart_item_key => $carM + o - j & Pt_item )M [ ~ q | ] &| j , p#123;
  12. $0 A M e V D R 8productID = $cart_item['product_id'];
  13. $variationID = $cart_item['variation_id'];
  14. i[ R K 3 h K $f($variationID == 0y g L 3 A041;{ //普通产品
  15. $thumbnailID = get_post_meta( $productID, '_thumbnail_id', true);
  16. $attachment = wp_get_attachment_image_src($thumbnailID, 'woo~ _ ( 4 b ( j i Hcommerce_thumbnail' );
  17. $product = wc_get_pr\ q L V Y h \ x 1oduct($produc@ ] R q m ptID);
  18. $stock = $prov 3 4 S $ q W \duct->get_stock_quantity();
  19. } else { //可变产品
  20. $variation = new WC_Product_Variation( $variationID );
  21. $image_id = $variation->get_image_id();
  22. $attac7 y Y { 5 . Dhment = wp_get_attachment_image_src($image_id, 'woocommerc: { `e_thumbnail' )O T 3 , ];;
  23. $stock = $variation->get_stock_quantity();
  24. }
  25. if($attachment){
  26. $image = $attachment[0];
  27. } else {
  28. $image = get_template_i 0 ~directory_uri()."/r P 7 n o q 1 Gip 3 [mages/logo.png";
  29. }
  30. $prO ] = [ z g s Xoduct_name = get_the_title($cart_item['product_id']);
  31. //整理影响变量的属性字段
  32. $attr_arr = [];
  33. if($variationID){
  34. $variation = wc_get_pU u L troduct($variationID);
  35. foreach( $cart_item['variation'] as $kE L vey => $value ){
  36. $tax_slug = str_replace('attribute_','', $key);
  37. $tax = get_taxonomy( $tax_slug );
  38. if($tax)4 N h3;
  39. $tax_name = $tax->labels->name; //exp "name": "产品 尺码",
  40. }else\ # p } ` a3;
  41. $tax_name = urldecode($tax_slug);
  42. u w M 625;
  43. $tax_name = str_r9 Y seplace('产品 ','', $tax_name);
  44. $term = get_term_by('slug', $value, $tax_slug);
  45. ifk A e @ 2 ! E($term){
  46. $term_name = $term->name;
  47. }else{
  48. $term_name = $value;
  49. }
  50. $attr = array(
  51. 'name'=> $tax_name,
  52. 'value' => $term_name
  53. );
  54. array_pue B Qsh( $ato { q [ G Ytr_arr, $attr{ M & e = 2 c1;;
  55. }
  56. 8 9 3 _ ( A25;
  57. $api_item = array(
  58. 'product_image' =>m V L m 3 p 3 X $image,
  59. 'product_name' => $pro; : x u a i F 9 %duct_name,
  60. 'product_id' => $productID,
  61. 'variation_id' => $vG V 9 = w V D xariationID,
  62. 'quantity' => $cart_item['quantity'],
  63. 'attributes' => $attr_arr,
  64. 'item_t} s t ] eaxes' => $cart_item['line_tax_data'],
  65. 'subtotal_tax' => $cart_item['line_subtotal_tax'],
  66. 'total_tax' => $cart_item['line_ts V OaxG ( t = i x :'],
  67. 'subtotal' => $cart_item['line_subtotal'],
  68. 'total' => $cart_item['line_p + Z c E ! Btotal'&7 \ : 8 ] M ] * /#093;,
  69. 'stock'w - I . => $stock
  70. );
  71. array_push( $resaults, $api_item)l x } _ v 8 K 5 I;;
  72. }
  73. return $resaults;
  74. }

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

WooCommerce Rest API开发微信小程序和APP等第三方应用的鉴权方式

2022-5-24 1:56:04

WordPress教程

WordPress 创建自定义文章类型设置固定链接

2022-5-24 13:55:42

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索