簡體   English   中英

WooCommerce cookie 和會話 - 獲取購物車中的當前產品

[英]WooCommerce cookies and sessions - Get the current products in cart

我嘗試學習 WooCommerce 的 cookie,以便執行添加到購物車的產品操作的任何功能。 我在控制台document.cookie寫了我得到這個數據:

woocommerce_items_in_cart=1;
woocommerce_cart_hash=500d17f6c010b62b25c3f52893be945d;

我知道cookie“ woocommerce_cart_hash ”包含購物車中的產品,但我不明白如何獲取產品名稱。 什么是500d17f6c010b62b25c3f52893be945d

任何幫助,將不勝感激。

正如您將在下面看到的, woocommerce_cart_hash不包含購物車中的產品,因為存在與WooCommerce 會話數據庫表相關的第三個更復雜的 cookie

數據並未存儲在 cookie 本身中,而是存儲在位於 DB WooCommerce 會話中的相應引用中(有關詳細信息,請參見下文) ...

您還必須注意 WordPress 啟用了一些本地數據存儲。

下面的數據取自一個真實的示例,其中一個未登錄的用戶將 2 個產品添加到購物車。

1) 當未登錄的用戶向購物車添加東西時,Woocommerce 設置了 3 個 cookie:

  • woocommerce_cart_hash => 44ffcb32800e5b20cfbb080753d48408 (安全/完整性哈希)
  • woocommerce_items_in_cart => 1 (購物車中有東西時設置為1
  • wp_woocommerce_session_3413758cad2ada414127ffee7347e40f => ac5f880c99503169574ad996f35f85c5%7C%7C1469492696%7C%7C1469489096%7C%7C17e565032403642121f5ad12cfa72c41 (完全相關wp_woocommerce_sessions同時DB表創建的會話比這個cookie)

2)在數據庫表wp_woocommerce_sessions同時生成一個會話:

session_id => 6
session_key => ac5f880c99503169574ad996f35f85c5
session_value => a:18:{s:4:"cart";s:600:"a:2:{s:32:"d82c8d1619ad8176d665453cfb2e55f0";a:9:{s:10:"product_id";i:53;s:12:"variation_id";i:0;s:9:"variation";a:0:{}s:8:"quantity";i:1;s:10:"line_total";d:35;s:8:"line_tax";i:0;s:13:"line_subtotal";i:35;s:17:"line_subtotal_tax";i:0;s:13:"line_tax_data";a:2:{s:5:"total";a:0:{}s:8:"subtotal";a:0:{}}}s:32:"a5bfc9e07964f8dddeb95fc584cd965d";a:9:{s:10:"product_id";i:37;s:12:"variation_id";i:0;s:9:"variation";a:0:{}s:8:"quantity";i:1;s:10:"line_total";d:18;s:8:"line_tax";i:0;s:13:"line_subtotal";i:18;s:17:"line_subtotal_tax";i:0;s:13:"line_tax_data";a:2:{s:5:"total";a:0:{}s:8:"subtotal";a:0:{}}}}";s:15:"applied_coupons";s:6:"a:0:{}";s:23:"coupon_discount_amounts";s:6:"a:0:{}";s:27:"coupon_discount_tax_amounts";s:6:"a:0:{}";s:21:"removed_cart_contents";s:6:"a:0:{}";s:19:"cart_contents_total";d:53;s:5:"total";d:53;s:8:"subtotal";i:53;s:15:"subtotal_ex_tax";i:53;s:9:"tax_total";i:0;s:5:"taxes";s:6:"a:0:{}";s:14:"shipping_taxes";s:6:"a:0:{}";s:13:"discount_cart";i:0;s:17:"discount_cart_tax";i:0;s:14:"shipping_total";N;s:18:"shipping_tax_total";i:0;s:9:"fee_total";i:0;s:4:"fees";s:6:"a:0:{}";} a:18:{s:4:"cart";s:600:"a:2:{s:32:"d82c8d1619ad8176d665453cfb2e55f0";a:9:{s:10:"product_id";i:53;s:12:"variation_id";i:0;s:9:"variation";a:0:{}s:8:"quantity";i:1;s:10:"line_total";d:35;s:8:"line_tax";i:0;s:13:"line_subtotal";i:35;s:17:"line_subtotal_tax";i:0;s:13:"line_tax_data";a:2:{s:5:"total";a:0:{}s:8:"subtotal";a:0:{}}}s:32:"a5bfc9e07964f8dddeb95fc584cd965d";a:9:{s:10:"product_id";i:37;s:12:"variation_id";i:0;s:9:"variation";a:0:{}s:8:"quantity";i:1;s:10:"line_total";d:18;s:8:"line_tax";i:0;s:13:"line_subtotal";i:18;s:17:"line_subtotal_tax";i:0;s:13:"line_tax_data";a:2:{s:5:"total";a:0:{}s:8:"subtotal";a:0:{}}}}";s:15:"applied_coupons";s:6:"a:0:{}";s:23:"coupon_discount_amounts";s:6:"a:0:{}";s:27:"coupon_discount_tax_amounts";s:6:"a:0:{}";s:21:"removed_cart_contents";s:6:"a:0:{}";s:19:"cart_contents_total";d:53;s:5:"total";d:53;s:8:"subtotal";i:53;s:15:"subtotal_ex_tax";i:53;s:9:"tax_total";i:0;s:5:"taxes";s:6:"a:0:{}";s:14:"shipping_taxes";s:6:"a:0:{}";s:13:"discount_cart";i:0;s:17:"discount_cart_tax";i:0;s:14:"shipping_total";N;s:18:"shipping_tax_total";i:0;s:9:"fee_total";i:0;s:4:"fees";s:6:"a:0:{}";}
session_expiry => 1469492696

我無法解釋所有核心進程(為此您需要查看 php 核心文件)。
但是,如果您查看wp_woocommerce_session_… cookie 值,您會發現您可以使用%7C%7C子字符串對其進行剪切,因此我們在這里為該 cookie 值提供了 4 個子字符串:

  • ac5f880c99503169574ad996f35f85c5 (與表wp_woocommerce_sessions的數據庫session_keysession_value的引用相同)。
  • 1469492696 (表wp_woocommerce_sessions的數據庫session_expiry )。
  • 1469489096 (同上)
  • 17e565032403642121f5ad12cfa72c41 (??? - 我真的不知道這是為了什么……)

如果用戶回來刪除購物車中的一件商品:

  • woocommerce_cart_hash cookie值更改
  • woocommerce_items_in_cart cookie值不會隨着商品留在購物車中而改變。
  • wp_woocommerce_session_3413758cad2ada414127ffee7347e40f cookie值不變。
  • DB wp_woocommerce_sessions TABLE會話 ID 6已被刪除/替換生成的會話 ID是反映購物車更改(僅一種產品)

因此,此時您可以看到 cookie 和會話數據庫表wp_woocommerce_sessions之間的關系,該表包含與未登錄用戶相關的所有購物車數據
(在一個 session_value序列化多維數組或對象)

使用WC_Cart 類,您將能夠獲得這些數據。
您還應該能夠在您的 php 代碼中使用WC()->cart語法……

使用WC_Session_Handler 類,您將能夠自己操作會話。

最后, WC_Ajax 類用於購物車更改。


參考:

只是為了跟進這個以防萬一有人感興趣。 所選答案對分解問題非常有幫助。 OP 詢問如何從會話 cookie 中獲取產品,所以我想我會跟進。

以下是我如何從wc_woocommerce_session_ cookie 中提取購物車數據:

  $session_id = null;
  $values = null;

  foreach( $_COOKIE as $key => $value ) {

    if( stripos( $key, 'wp_woocommerce_session_' ) === false ) {
      continue;
    }

    $values = explode( '||', $value );

  }

  $session_id = $values[0];
  $session = new WC_Session_Handler();
  $session_data = $session->get_session( $session_id );

  // Contains array of items in cart including product ids, quantities, totals, etc.
  $cart_data = unserialize( $session_data['cart'] );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM