php WooCommerce -如何为定义的会话键获取结账车项目

vcirk6k6  于 2024-01-05  发布在  PHP
关注(0)|答案(1)|浏览(231)

我在数据库中有一个表:

  1. wp_woocommerce_sessions

字符串
用柱子:

  1. session_id
  2. session_key
  3. session_value
  4. session_expiry
  5. 9
  6. t_2ca6a9a0ec3a668971f8bdbebea4c3
  7. a:7:{s:4:"cart";s:6:"a:0:{}";s:11:"cart_totals";s:...
  8. 1703763057


是否有任何解决方案,以便我可以定义要为已定义的会话获取的 checkout 项?示例我想定义为session_key t_2ca6a9a0ec3a668971f8bdbebea4c3获取 checkout 项
我发现:woocommerce/includes/class-wc-cart-session.php

  1. public function get_cart_from_session() {
  2. do_action( 'woocommerce_load_cart_from_session' );
  3. $this->cart->set_totals( WC()->session->get( 'cart_totals', null ) );
  4. $this->cart->set_applied_coupons( WC()->session->get( 'applied_coupons', array() ) );
  5. $this->cart->set_coupon_discount_totals( WC()->session->get( 'coupon_discount_totals', array() ) );
  6. $this->cart->set_coupon_discount_tax_totals( WC()->session->get( 'coupon_discount_tax_totals', array() ) );
  7. $this->cart->set_removed_cart_contents( WC()->session->get( 'removed_cart_contents', array() ) );
  8. $update_cart_session = false; // Flag to indicate the stored cart should be updated.
  9. $order_again = false; // Flag to indicate whether this is a re-order.
  10. $cart = WC()->session->get( 'cart', null );
  11. $merge_saved_cart = (bool) get_user_meta( get_current_user_id(), '_woocommerce_load_saved_cart_after_login', true );


现在我想如何自定义:woocommerce_load_cart_from_session

jdgnovmf

jdgnovmf1#

wp_woocommerce_sessions表中获取会话数据:

  1. function get_woocommerce_session_data($session_key) {
  2. global $wpdb;
  3. $table_name = $wpdb->prefix . 'woocommerce_sessions';
  4. $session_data = $wpdb->get_var($wpdb->prepare(
  5. "SELECT session_value FROM $table_name WHERE session_key = %s",
  6. $session_key
  7. ));
  8. return maybe_unserialize($session_data);
  9. }

字符串
使用上面的函数提取购物车项目:

  1. function get_cart_items_from_session_data($session_data) {
  2. if (isset($session_data['cart']) && is_array($session_data['cart'])) {
  3. $cart_items = array();
  4. foreach ($session_data['cart'] as $item_key => $item_value) {
  5. $cart_items[$item_key] = maybe_unserialize($item_value);
  6. }
  7. return $cart_items;
  8. }
  9. return false;
  10. }


使用示例:

  1. $session_key = 't_2ca6a9a0ec3a668971f8bdbebea4c3'; // replace with your session key
  2. $session_data = get_woocommerce_session_data($session_key);
  3. $cart_items = get_cart_items_from_session_data($session_data);
  4. if ($cart_items) {
  5. // Process the cart items
  6. foreach ($cart_items as $item) {
  7. // Your code here
  8. }
  9. } else {
  10. echo 'No cart items found for this session.';
  11. }

展开查看全部

相关问题