You must specifiy a layout in the include tag: <include layout="@layout/layoutID" />

本文讨论了一个关于在布局文件中添加自定义工具栏所导致的问题,并提供了具体的代码示例。
出现这个的原因是在下面的layout前面添加了android:
<include layout="@layout/custom_toolbar"/>

Please double check if the combination of codes are correct Functions.php cart) wc_load_cart(); $items = array(); foreach (WC()->cart->get_cart() as $ci_key => $ci) { $pid = isset($ci[‘product_id’]) ? (int)$ci[‘product_id’] : 0; $vid = isset($ci[‘variation_id’]) ? (int)$ci[‘variation_id’] : 0; $qty = isset($ci[‘quantity’]) ? wc_stock_amount($ci[‘quantity’]) : 0; $var = isset($ci[‘variation’]) && is_array($ci[‘variation’]) ? $ci[‘variation’] : array(); if ($pid && $qty > 0) { $items[] = array( ‘product_id’ => $pid, ‘variation_id’ => $vid, ‘variation’ => array_map(‘wc_clean’, $var), ‘quantity’ => $qty, ); } } return $items; } /** 从快照恢复购物车 */ function pc_restore_cart_from_items($items) { if (!WC()->cart) wc_load_cart(); WC()->cart->empty_cart(); foreach ((array)$items as $it) { $pid = isset($it[‘product_id’]) ? (int)$it[‘product_id’] : 0; $vid = isset($it[‘variation_id’]) ? (int)$it[‘variation_id’] : 0; $qty = isset($it[‘quantity’]) ? wc_stock_amount($it[‘quantity’]) : 0; $var = isset($it[‘variation’]) && is_array($it[‘variation’]) ? array_map(‘wc_clean’, $it[‘variation’]) : array(); if ($pid && $qty > 0) { WC()->cart->add_to_cart($pid, $qty, $vid, $var); } } WC()->cart->calculate_totals(); } /** 生成瞬态键名 */ function pc_transient_key($token) { return ‘pc_partial_payload_’ . sanitize_key($token); } /* ------------------------------------------------- AJAX: 当购物车为空时恢复购物车 ------------------------------------------------- */ add_action(‘wp_ajax_pc_rehydrate_cart’, ‘pc_rehydrate_cart’); add_action(‘wp_ajax_nopriv_pc_rehydrate_cart’, ‘pc_rehydrate_cart’); function pc_rehydrate_cart() { check_ajax_referer(‘woocommerce-cart’, ‘security’); $raw = isset($_POST[‘items’]) ? wp_unslash($_POST[‘items’]) : ‘’; $items = is_string($raw) ? json_decode($raw, true) : (array)$raw; if (!is_array($items)) { wp_send_json_error(array(‘message’ => ‘无效的商品数据’), 400); } if (!WC()->cart) wc_load_cart(); if (!WC()->cart->is_empty()) { wp_send_json_success(array(‘message’ => ‘购物车非空’)); } foreach ($items as $it) { $pid = isset($it[‘product_id’]) ? (int)$it[‘product_id’] : 0; $vid = isset($it[‘variation_id’]) ? (int)$it[‘variation_id’] : 0; $qty = isset($it[‘quantity’]) ? wc_stock_amount($it[‘quantity’]) : 0; $var = isset($it[‘variation’]) && is_array($it[‘variation’]) ? array_map(‘wc_clean’, $it[‘variation’]) : array(); if ($pid && $qty > 0) { WC()->cart->add_to_cart($pid, $qty, $vid, $var); } } WC()->cart->calculate_totals(); wp_send_json_success(array(‘rehydrated’ => true)); } /* ------------------------------------------------- AJAX: 更新商品数量 (无需刷新页面) ------------------------------------------------- */ add_action(‘wp_ajax_update_cart_item_qty’, ‘pc_update_cart_item_qty’); add_action(‘wp_ajax_nopriv_update_cart_item_qty’, ‘pc_update_cart_item_qty’); function pc_update_cart_item_qty() { check_ajax_referer(‘woocommerce-cart’, ‘security’); $key = isset($_POST[‘cart_item_key’]) ? wc_clean(wp_unslash($_POST[‘cart_item_key’])) : ‘’; $qty = isset($_POST[‘qty’]) ? wc_stock_amount($_POST[‘qty’]) : null; if (!$key || $qty === null) { wp_send_json_error(array(‘message’ => ‘缺少参数’), 400); } if (!WC()->cart) wc_load_cart(); if ($qty <= 0) { $removed = WC()->cart->remove_cart_item($key); WC()->cart->calculate_totals(); wp_send_json_success(array(‘removed’ => (bool)$removed)); } else { $set = WC()->cart->set_quantity($key, $qty, true); WC()->cart->calculate_totals(); $cart_item = WC()->cart->get_cart_item($key); if (!$cart_item) { wp_send_json_error(array(‘message’ => ‘更新后找不到商品’), 404); } $_product = $cart_item[‘data’]; $subtotal_html = apply_filters(‘woocommerce_cart_item_subtotal’, WC()->cart->get_product_subtotal($_product, $cart_item[‘quantity’]), $cart_item, $key); $line_total_incl_tax = (float)($cart_item[‘line_total’] + $cart_item[‘line_tax’]); wp_send_json_success(array( ‘subtotal_html’ => $subtotal_html, ‘line_total_incl_tax’ => $line_total_incl_tax, ‘removed’ => false )); } } /* ------------------------------------------------- AJAX: 删除选中商品 ------------------------------------------------- */ add_action(‘wp_ajax_remove_selected_cart_items’, ‘pc_remove_selected_cart_items’); add_action(‘wp_ajax_nopriv_remove_selected_cart_items’, ‘pc_remove_selected_cart_items’); function pc_remove_selected_cart_items() { check_ajax_referer(‘woocommerce-cart’, ‘security’); $keys = isset($_POST[‘selected_items’]) ? (array) $_POST[‘selected_items’] : array(); if (!WC()->cart) wc_load_cart(); foreach ($keys as $k) { $k = wc_clean(wp_unslash($k)); WC()->cart->remove_cart_item($k); } WC()->cart->calculate_totals(); wp_send_json_success(true); } /* ------------------------------------------------- AJAX: 清空购物车 ------------------------------------------------- */ add_action(‘wp_ajax_empty_cart’, ‘pc_empty_cart’); add_action(‘wp_ajax_nopriv_empty_cart’, ‘pc_empty_cart’); function pc_empty_cart() { check_ajax_referer(‘woocommerce-cart’, ‘security’); if (!WC()->cart) wc_load_cart(); WC()->cart->empty_cart(); wp_send_json_success(true); } /* ------------------------------------------------- AJAX: 应用优惠券 ------------------------------------------------- */ add_action(‘wp_ajax_apply_coupon’, ‘pc_apply_coupon’); add_action(‘wp_ajax_nopriv_apply_coupon’, ‘pc_apply_coupon’); function pc_apply_coupon() { check_ajax_referer(‘woocommerce-cart’, ‘security’); $code = isset($_POST[‘coupon_code’]) ? wc_format_coupon_code(wp_unslash($_POST[‘coupon_code’])) : ‘’; if (!$code) { wp_send_json_error(array(‘message’ => __(‘请输入优惠券代码’, ‘woocommerce’)), 400); } if (!WC()->cart) wc_load_cart(); $applied = WC()->cart->apply_coupon($code); WC()->cart->calculate_totals(); if (is_wp_error($applied)) { wp_send_json_error(array(‘message’ => $applied->get_error_message()), 400); } if (!$applied) { wp_send_json_error(array(‘message’ => __(‘优惠券应用失败’, ‘woocommerce’)), 400); } wp_send_json_success(true); } /* ------------------------------------------------- AJAX: 创建部分结算订单 将快照和选中商品存储在瞬态中 将会话中的token标记 返回结账URL ------------------------------------------------- */ add_action(‘wp_ajax_create_direct_order’, ‘pc_create_direct_order’); add_action(‘wp_ajax_nopriv_create_direct_order’, ‘pc_create_direct_order’); function pc_create_direct_order() { check_ajax_referer(‘woocommerce-cart’, ‘security’); // 初始化会话 if (!WC()->session) { WC()->session = new WC_Session_Handler(); WC()->session->init(); } $selected_keys = isset($_POST[‘selected_items’]) ? (array) $_POST[‘selected_items’] : array(); if (empty($selected_keys)) { wp_send_json_error(array(‘message’ => __(‘请选择要结算的商品’, ‘woocommerce’)), 400); } if (!WC()->cart) wc_load_cart(); // 创建完整购物车快照 $snapshot = pc_snapshot_current_cart(); // 提取选中商品 $selected = array(); foreach (WC()->cart->get_cart() as $ci_key => $ci) { if (!in_array($ci_key, $selected_keys, true)) { continue; } $pid = isset($ci[‘product_id’]) ? (int)$ci[‘product_id’] : 0; $vid = isset($ci[‘variation_id’]) ? (int)$ci[‘variation_id’] : 0; $qty = isset($ci[‘quantity’]) ? wc_stock_amount($ci[‘quantity’]) : 0; $var = isset($ci[‘variation’]) && is_array($ci[‘variation’]) ? array_map(‘wc_clean’, $ci[‘variation’]) : array(); if ($pid && $qty > 0) { $selected[] = array( ‘product_id’ => $pid, ‘variation_id’ => $vid, ‘variation’ => $var, ‘quantity’ => $qty, ); } } if (empty($selected)) { wp_send_json_error(array(‘message’ => __(‘没有可结算的商品’, ‘woocommerce’)), 400); } $token = wp_generate_uuid4(); $payload = array( ‘uid’ => pc_get_cart_uid(), ‘snapshot’ => $snapshot, ‘selected’ => $selected, ‘created’ => time(), ); set_transient(pc_transient_key($token), $payload, 2 * DAY_IN_SECONDS); // 将token存入会话 if (method_exists(WC()->session, ‘set’)) { WC()->session->set(‘pc_partial_token’, $token); } $checkout_url = add_query_arg(‘pc_token’, rawurlencode($token), wc_get_checkout_url()); wp_send_json_success(array(‘checkout_url’ => $checkout_url)); } /* ------------------------------------------------- 结账流程处理 根据token虚拟化购物车 处理前确保重新虚拟化 订单标记token 感谢页重建购物车 返回购物车时恢复快照 ------------------------------------------------- */ // 进入结账页时虚拟化购物车 add_action(‘woocommerce_before_checkout_form’, ‘pc_virtualize_cart_on_checkout’, 1); function pc_virtualize_cart_on_checkout() { if (!isset($_GET[‘pc_token’])) return; $token = sanitize_text_field(wp_unslash($_GET[‘pc_token’])); $payload = get_transient(pc_transient_key($token)); if (empty($payload) || empty($payload[‘selected’])) return; if (!WC()->cart) wc_load_cart(); // 仅加载选中商品 pc_restore_cart_from_items($payload[‘selected’]); // 持久化token用于后续AJAX调用 if (method_exists(WC()->session, ‘set’)) { WC()->session->set(‘pc_partial_token’, $token); } } // 订单处理前再次确保虚拟化 add_action(‘woocommerce_before_checkout_process’, ‘pc_revirtualize_before_processing’, 1); function pc_revirtualize_before_processing() { if (!method_exists(WC()->session, ‘get’)) return; $token = WC()->session->get(‘pc_partial_token’); if (!$token) return; $payload = get_transient(pc_transient_key($token)); if (empty($payload) || empty($payload[‘selected’])) return; pc_restore_cart_from_items($payload[‘selected’]); } // 订单标记token add_action(‘woocommerce_checkout_create_order’, ‘pc_tag_order_with_token’, 10, 1); function pc_tag_order_with_token($order) { $token = null; if (isset($_GET[‘pc_token’])) { $token = sanitize_text_field(wp_unslash($_GET[‘pc_token’])); } elseif (method_exists(WC()->session, ‘get’)) { $token = WC()->session->get(‘pc_partial_token’); } if ($token) { $order->update_meta_data(‘_pc_partial_token’, $token); } } // 感谢页重建购物车 add_action(‘woocommerce_thankyou’, ‘pc_rebuild_cart_on_thankyou’, 20); function pc_rebuild_cart_on_thankyou($order_id) { $order = wc_get_order($order_id); if (!$order) return; $token = $order->get_meta(‘_pc_partial_token’); if (!$token) return; $payload = get_transient(pc_transient_key($token)); if (empty($payload) || empty($payload[‘snapshot’])) { // 清理会话token if (method_exists(WC()->session, ‘set’)) { WC()->session->set(‘pc_partial_token’, null); } delete_transient(pc_transient_key($token)); return; } // 创建已购商品映射表 $purchased = array(); foreach ($order->get_items() as $item) { $pid = (int)$item->get_product_id(); $vid = (int)$item->get_variation_id(); $qty = (int)$item->get_quantity(); $k = pc_build_item_key($pid, $vid); if (!isset($purchased[$k])) $purchased[$k] = 0; $purchased[$k] += $qty; } // 剩余商品 = 快照 - 已购 $remainder = array(); foreach ($payload[‘snapshot’] as $it) { $pid = isset($it[‘product_id’]) ? (int)$it[‘product_id’] : 0; $vid = isset($it[‘variation_id’]) ? (int)$it[‘variation_id’] : 0; $qty = isset($it[‘quantity’]) ? wc_stock_amount($it[‘quantity’]) : 0; $var = isset($it[‘variation’]) ? $it[‘variation’] : array(); $k = pc_build_item_key($pid, $vid); $take = isset($purchased[$k]) ? (int)$purchased[$k] : 0; $left = max(0, $qty - $take); if ($left > 0) { $remainder[] = array( ‘product_id’ => $pid, ‘variation_id’ => $vid, ‘variation’ => $var, ‘quantity’ => $left, ); $purchased[$k] = max(0, $take - $qty); } } // 重建剩余商品的购物车 pc_restore_cart_from_items($remainder); // 清理会话token if (method_exists(WC()->session, ‘set’)) { WC()->session->set(‘pc_partial_token’, null); } delete_transient(pc_transient_key($token)); } /* ------------------------------------------------- 支付取消处理 当订单取消时恢复原始购物车 ------------------------------------------------- */ add_action(‘woocommerce_cancelled_order’, ‘pc_restore_cart_on_cancellation’); function pc_restore_cart_on_cancellation($order_id) { $order = wc_get_order($order_id); if (!$order) return; $token = $order->get_meta(‘_pc_partial_token’); if (!$token) return; $payload = get_transient(pc_transient_key($token)); if (empty($payload) || empty($payload[‘snapshot’])) { delete_transient(pc_transient_key($token)); return; } // 恢复完整购物车快照 pc_restore_cart_from_items($payload[‘snapshot’]); // 清理会话token if (method_exists(WC()->session, ‘set’)) { WC()->session->set(‘pc_partial_token’, null); } delete_transient(pc_transient_key($token)); } /* ------------------------------------------------- 跨标签页购物车同步 使用localStorage实现 ------------------------------------------------- */ add_action(‘wp_footer’, function() { if (!class_exists(‘WooCommerce’)) return; ?> session->get(‘original_cart’)) { $data[‘count’] = count($original); } return $data; }); /* ------------------------------------------------- 辅助函数:生成UUIDv4 ------------------------------------------------- */ if (!function_exists(‘wp_generate_uuid4’)) { function wp_generate_uuid4() { return sprintf(‘%04x%04x-%04x-%04x-%04x-%04x%04x%04x’, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) ); } } /* ------------------------------------------------- 会话初始化保障 ------------------------------------------------- */ add_action(‘woocommerce_init’, function() { if (!WC()->session) { WC()->session = new WC_Session_Handler(); WC()->session->init(); } }); Cart.php " method=“post”> <input type="hidden" id="selected_items" name="selected_items" value=""> do_action(‘woocommerce_before_cart’); // Provide tiny context for JS (invisible; no layout change) $pc_cart_is_empty = WC()->cart->is_empty(); function pc_uid_for_view() { if (is_user_logged_in()) return ‘user_’ . get_current_user_id(); if (empty($_COOKIE[‘pc_cart_uid’])) { $token = wp_generate_uuid4(); setcookie(‘pc_cart_uid’, $token, time() + YEAR_IN_SECONDS, COOKIEPATH ?: ‘/’, ‘’, is_ssl(), false); $COOKIE[‘pc_cart_uid’] = $token; } return 'guest’ . sanitize_text_field(wp_unslash($_COOKIE[‘pc_cart_uid’])); } $pc_uid = pc_uid_for_view(); ?> <div class="cart-page-section container" style="max-width: 1200px; margin: 0 auto;"> <form class="woocommerce-cart-form" action="<?php echo esc_url( wc_get_cart_url() ); ?>" method="post"> cart->get_cart() as $cart_item_key => $cart_item ) : ?> exists() && $cart_item['quantity'] > 0 && apply_filters('woocommerce_cart_item_visible', true, $cart_item, $cart_item_key) ) : $product_permalink = apply_filters('woocommerce_cart_item_permalink', $_product->is_visible() ? $_product->get_permalink($cart_item) : '', $cart_item, $cart_item_key); $line_total_value = (float) ($cart_item['line_total'] + $cart_item['line_tax']); $variation_id = isset($cart_item['variation_id']) ? (int)$cart_item['variation_id'] : 0; $variation_data = isset($cart_item['variation']) ? $cart_item['variation'] : array(); $variation_json = wp_json_encode($variation_data); ?> <table class="shop_table shop_table_responsive cart woocommerce-cart-form__contents"> <thead> <tr> <th class="product-select" style="width: 8%;"> <input type="checkbox" id="select-all-items"> <label for="select-all-items" style="display: inline-block; margin-left: 5px; cursor: pointer;">全选</label> </th> <th class="product-info"></th> <th class="product-price"></th> <th class="product-quantity"></th> <th class="product-subtotal"></th> <th class="product-remove"></th> </tr> </thead> <tbody> <tr class="woocommerce-cart-form__cart-item <?php echo esc_attr( apply_filters('woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key) ); ?>" data-cart_item_key="<?php echo esc_attr($cart_item_key); ?>" data-product_id="<?php echo esc_attr($product_id); ?>" data-variation_id="<?php echo esc_attr($variation_id); ?>" data-variation="<?php echo esc_attr($variation_json); ?>"> <td class="product-select" data-title="<?php esc_attr_e('Select', 'woocommerce'); ?>"> <input type="checkbox" class="item-checkbox" name="selected_items[]" value="<?php echo esc_attr($cart_item_key); ?>" data-price="<?php echo esc_attr($line_total_value); ?>"> </td> <td class="product-info" data-title="<?php esc_attr_e('Product', 'woocommerce'); ?>"> <div class="product-image"> get_image(), $cart_item, $cart_item_key); if ( ! $product_permalink ) : echo $thumbnail; // PHPCS: XSS ok. else : printf('<a href="%s">%s</a>', esc_url($product_permalink), $thumbnail); // PHPCS: XSS ok. endif; ?> </div> <div class="product-name"> get_name(), $cart_item, $cart_item_key) . ' ' ); else : echo wp_kses_post( apply_filters('woocommerce_cart_item_name', sprintf('<a href="%s">%s</a>', esc_url($product_permalink), $_product->get_name()), $cart_item, $cart_item_key) ); endif; do_action('woocommerce_after_cart_item_name', $cart_item, $cart_item_key); echo wc_get_formatted_cart_item_data($cart_item); // PHPCS: XSS ok. ?> </div> </td> <td class="product-price" data-title="<?php esc_attr_e('Price', 'woocommerce'); ?>"> cart->get_product_price($_product), $cart_item, $cart_item_key); // PHPCS: XSS ok. ?> </td> <td class="product-quantity" data-title="<?php esc_attr_e('Quantity', 'woocommerce'); ?>"> is_sold_individually() ) : $product_quantity = sprintf('1 <input type="hidden" name="cart[%s][qty]" value="1">', $cart_item_key); else : $product_quantity = woocommerce_quantity_input( array( 'input_name' => "cart[{$cart_item_key}][qty]", 'input_value' => $cart_item['quantity'], 'max_value' => $_product->get_max_purchase_quantity(), 'min_value' => '0', 'product_name' => $_product->get_name(), ), $_product, false ); endif; echo apply_filters('woocommerce_cart_item_quantity', $product_quantity, $cart_item_key, $cart_item); // PHPCS: XSS ok. ?> <small class="qty-status" style="display:none;margin-left:8px;color:#666;">保存中…</small> </td> <td class="product-subtotal" data-title="<?php esc_attr_e('Subtotal', 'woocommerce'); ?>"> cart->get_product_subtotal($_product, $cart_item['quantity']), $cart_item, $cart_item_key); // PHPCS: XSS ok. ?> </td> <td class="product-remove" data-title="<?php esc_attr_e('操作', 'woocommerce'); ?>"> ×', esc_url( wc_get_cart_remove_url($cart_item_key) ), esc_attr__('Remove this item', 'woocommerce'), esc_attr($product_id), esc_attr($_product->get_sku()) ), $cart_item_key); ?> </td> </tr> </tbody> </table> </form> </div> <div class="cart-footer-actions sticky-footer" style="position: sticky; bottom: 0; background: white; padding: 15px; border-top: 1px solid #ddd; max-width: 1200px; margin: 0 auto;"> <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;"> <div class="footer-left"> <input type="checkbox" id="footer-select-all"> <label for="footer-select-all" style="display: inline-block; margin-left: 5px; cursor: pointer;">全选</label> <button type="button" class="button" id="remove-selected-items">刪除選中的商品</button> <button type="button" class="button" id="clear-cart">清空購物車</button> </div> <div class="coupon-section"> <input type="text" name="coupon_code" class="input-text" id="coupon_code" value="" placeholder="输入优惠券代码" style="padding: 8px; width: 200px; border: 1px solid #ddd; border-radius: 4px; margin-right: 5px;"> <button type="button" class="button" id="apply-coupon">应用优惠券</button> </div> </div> <div style="display: flex; justify-content: space-between; align-items: center;"> <div class="selected-summary" style="font-size: 16px; font-weight: bold;"> 已选商品: <span id="selected-count">0</span> 件,共计: <span id="selected-total">RM0.00</span> </div> <a href="<?php echo esc_url( wc_get_checkout_url() ); ?>" class="checkout-button button alt wc-forward" id="partial-checkout">结算</a> </div> </div> form-checkout.php session) return; // 从会话获取选中商品 $selected_keys = WC()->session->get(‘pc_selected_items’) ?: []; // 存储原始购物车 if(empty(WC()->session->get(‘original_cart’))) { WC()->session->set(‘original_cart’, WC()->cart->get_cart()); // 创建临时结账购物车 $checkout_cart = []; foreach(WC()->cart->get_cart() as $key => $item) { if(in_array($key, $selected_keys)) { $checkout_cart[$key] = $item; } } WC()->session->set(‘checkout_cart’, $checkout_cart); // 更新实际购物车 WC()->cart->empty_cart(); foreach($checkout_cart as $key => $item) { WC()->cart->add_to_cart( $item[‘product_id’], $item[‘quantity’], $item[‘variation_id’], $item[‘variation’] ); } } }, 5); if ( ! defined( ‘ABSPATH’ ) ) { exit; } //WC 3.5.0 if ( function_exists( ‘WC’ ) && version_compare( WC()->version, ‘3.5.0’, ‘<’ ) ) { wc_print_notices(); } do_action( ‘woocommerce_before_checkout_form’, $checkout ); // If checkout registration is disabled and not logged in, the user cannot checkout. if ( ! $checkout->is_registration_enabled() && $checkout->is_registration_required() && ! is_user_logged_in() ) { echo esc_html( apply_filters( ‘woocommerce_checkout_must_be_logged_in_message’, __( ‘You must be logged in to checkout.’, ‘woocommerce’ ) ) ); return; } // filter hook for include new pages inside the payment method $get_checkout_url = apply_filters( ‘woocommerce_get_checkout_url’, wc_get_checkout_url() ); ?> <form name="checkout" method="post" class="checkout woocommerce-checkout" action="<?php echo esc_url( $get_checkout_url ); ?>" enctype="multipart/form-data" aria-label="<?php echo esc_attr__( 'Checkout', 'woocommerce' ); ?>"> get_checkout_fields() ) : ?> <div class="customer-details" id="customer_details"> </div> <div class="checkout-order-review"> <h3 id="order_review_heading"></h3> <div id="order_review" class="woocommerce-checkout-review-order"> </div> </div> </form> order-create.php session) return; $checkout_cart = WC()->session->get(‘checkout_cart’) ?: []; $original_cart = WC()->session->get(‘original_cart’) ?: []; // 从原始购物车移除已结算商品 foreach($checkout_cart as $key => $item) { if(isset($original_cart[$key])) { unset($original_cart[$key]); } } // 更新实际购物车 WC()->cart->empty_cart(); foreach($original_cart as $key => $item) { WC()->cart->add_to_cart( $item[‘product_id’], $item[‘quantity’], $item[‘variation_id’], $item[‘variation’], // 必须包含变体属性 $item[‘cart_item_data’] ); } // 清理session WC()->session->__unset(‘original_cart’); WC()->session->__unset(‘checkout_cart’); } payment-cancel.php session->get(‘original_cart’)) { WC()->cart->empty_cart(); foreach($original_cart as $key => $item) { WC()->cart->add_to_cart( $item[‘product_id’], $item[‘quantity’], $item[‘variation_id’], $item[‘variation’], $item[‘cart_item_data’] ); } } // 清理session WC()->session->__unset(‘original_cart’); WC()->session->__unset(‘checkout_cart’); // 重定向到购物车 wp_redirect(wc_get_cart_url()); exit; } } these are the full code for these file. If wrong, please give me the full code to be replaced with the current one.
09-03
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" android:layout_marginBottom="4dp" android:background="@color/gray" android:gravity="center_vertical"> <TextView android:id="@+id/tv_order" style="@style/tvNavigationBarStyle" android:text="点菜" android:textColor="@android:color/black" /> <TextView android:id="@+id/tv_discuss" style="@style/tvNavigationBarStyle" android:layout_toRightOf="@id/tv_order" android:text="评价" android:textColor="@color/dark_gray" /> <TextView android:id="@+id/tv_business" style="@style/tvNavigationBarStyle" android:layout_toRightOf="@id/tv_discuss" android:text="商家" android:textColor="@color/dark_gray" /> <TextView android:layout_width="70dp" android:layout_height="30dp" android:layout_alignParentRight="true" android:layout_marginRight="15dp" android:background="@drawable/friend_list" android:gravity="center" android:text="好友拼单" android:textColor="#ef842c" android:textSize="12sp" /> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <fragment android:id="@+id/left" android:name="left_layout" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" tools:layout="@layout/left_layout" /> <fragment android:id="@+id/right" android:name="right_latout" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="3" tools:layout="@layout/right_layout" /> </LinearLayout> </LinearLayout><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#f7f8f9" android:gravity="center_horizontal" android:orientation="vertical"> <TextView android:id="@+id/tv_recommend" style="@style/tvLeftStyle" android:text="推荐" android:background="@android:color/white"/> <TextView android:id="@+id/tv_must_buy" style="@style/tvLeftStyle" android:text="进店必买" /> </LinearLayout><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:padding="4dp"> <ImageView android:id="@+id/iv_img" android:layout_width="70dp" android:layout_height="70dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:orientation="vertical"> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="2dp" android:textColor="@android:color/black" android:textSize="14sp" /> <TextView android:id="@+id/tv_sale" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#868788" android:textSize="12sp" /> <TextView android:id="@+id/tv_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:textColor="#e85b4d" android:textSize="12sp" /> </LinearLayout> </LinearLayout><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:orientation="vertical"> <ListView android:id="@+id/lv_list" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="@null"/> </LinearLayout>修改代码,并展示
最新发布
11-01
由于你没有提供具体的多个 Android XML 布局代码,这里以你最初提供的代码为例进行修改和展示。假设要做以下修改: - 修正 `android:name` 属性为正确的 Fragment 类名(这里只是示例,需替换为实际类名)。 - 统一 ID 定义和引用规范。 ```xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" android:layout_marginBottom="4dp" android:background="@color/gray" android:gravity="center_vertical"> <TextView android:id="@+id/tv_order" style="@style/tvNavigationBarStyle" android:text="点菜" android:textColor="@android:color/black" /> <TextView android:id="@+id/tv_discuss" style="@style/tvNavigationBarStyle" android:layout_toRightOf="@id/tv_order" android:text="评价" android:textColor="@color/dark_gray" /> <TextView android:id="@+id/tv_business" style="@style/tvNavigationBarStyle" android:layout_toRightOf="@id/tv_discuss" android:text="商家" android:textColor="@color/dark_gray" /> <TextView android:layout_width="70dp" android:layout_height="30dp" android:layout_alignParentRight="true" android:layout_marginRight="15dp" android:background="@drawable/friend_list" android:gravity="center" android:text="好友拼单" android:textColor="#ef842c" android:textSize="12sp" /> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <fragment android:id="@+id/left" android:name="com.example.app.LeftFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" tools:layout="@layout/left_layout" /> <fragment android:id="@+id/right" android:name="com.example.app.RightFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="3" tools:layout="@layout/right_layout" /> </LinearLayout> </LinearLayout> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值