[英]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_key
和session_value
的引用相同)。1469492696
(表wp_woocommerce_sessions
的數據庫session_expiry
)。1469489096
(同上) 。17e565032403642121f5ad12cfa72c41
(??? - 我真的不知道這是為了什么……)
如果用戶回來刪除購物車中的一件商品:
woocommerce_cart_hash
cookie值更改woocommerce_items_in_cart
cookie值不會隨着商品留在購物車中而改變。wp_woocommerce_session_3413758cad2ada414127ffee7347e40f
cookie值不變。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.