解决WooCommerce自定义结账表单在非预览模式下购物车为空的问题

解决woocommerce自定义结账表单在非预览模式下购物车为空的问题

本文深入探讨了WooCommerce自定义页面结账表单在预览模式下正常工作,但在常规访问时显示“购物车为空”的常见问题。核心原因在于WooCommerce购物车会话未被正确加载和初始化。教程将详细介绍如何通过在代码中引入 wc_load_cart() 函数来确保购物车会话的正确加载,从而解决此问题,并提供完整的代码示例及开发注意事项,帮助开发者构建稳定可靠的自定义结账流程。

理解问题根源

在WordPress和WooCommerce环境中,当开发者构建自定义的“页内结账”表单,允许用户直接在产品页面完成支付而无需跳转到购物车页面时,可能会遇到一个奇怪的现象:表单在WordPress的预览模式下运行良好,订单可以正常处理并支付;然而,一旦在新的浏览器窗口、不同的浏览器或移动设备上访问同一页面,点击确认订单按钮后却被重定向到“您的购物车当前为空”的页面,且订单未被处理。

这个问题的核心在于WooCommerce的会话管理机制。在某些特定的加载上下文中(例如WordPress的预览模式),WooCommerce的购物车会话可能已被隐式加载。但在常规的页面请求中,如果自定义代码在操作购物车之前没有明确地初始化或加载购物车会话,那么对 WC()->cart 对象的任何操作(如 empty_cart() 或 add_to_cart())都可能在一个未完全准备好的购物车实例上进行,导致购物车状态无法正确保存或识别,最终表现为“购物车为空”。

解决方案:强制加载购物车会话

解决此问题的关键在于确保在尝试修改购物车内容之前,WooCommerce的购物车会话已被完全加载。WooCommerce提供了一个专门的函数 wc_load_cart() 来实现这一目的。

通过在对购物车进行任何操作(例如清空购物车或添加商品)之前调用 wc_load_cart(),可以强制WooCommerce从会话中加载当前的购物车状态,从而保证后续的购物车操作能够正确地作用于持久化的购物车数据。

代码实现

以下是修改后的自定义结账表单PHP代码,其中关键的改动是添加了 wc_load_cart();。

get_available_variations();$variations = array_map(function ($variation) use ($options) {    return [        'id' => $variation['variation_id'],        'label' => $variation['attributes']['attribute_quantita'],        'price' => $variation['display_price'],        'regular_price' => $variation['display_regular_price'],        'quantity' => strip_tags($variation['variation_description']),        'highlight' => $options['highlight_label_' . $variation['variation_id']] ?? false,        'highlight_color' => $options['highlight_label_color_' . $variation['variation_id']] ?? false,    ];}, $variations);$initialVariation = $variations[0];function formatPrice($price){    echo number_format($price, 2, ',', '') . '€';}// 关键改动:在操作购物车之前加载购物车会话wc_load_cart(); WC()->cart->empty_cart();WC()->cart->add_to_cart($productId, 1, $initialVariation['id']);if(class_exists('WC_Gateway_Stripe')) {    $stripe = new WC_Gateway_Stripe();    $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';    wp_register_style('stripe_styles', plugins_url('assets/css/stripe-styles.css', WC_STRIPE_MAIN_FILE), [], WC_STRIPE_VERSION);    wp_enqueue_style('stripe_styles');    wp_register_script('stripe', 'https://js.stripe.com/v3/', '', '3.0', true);    wp_register_script('woocommerce_stripe', plugins_url('assets/js/stripe' . $suffix . '.js', WC_STRIPE_MAIN_FILE), ['jquery-payment', 'stripe'], WC_STRIPE_VERSION, true);    wp_register_script('woocommerce_gateway_stripe', plugins_url('assets/js/stripe' . $suffix . '.js', WC_STRIPE_MAIN_FILE), ['jquery-payment', 'stripe'], WC_STRIPE_VERSION, true);    wp_localize_script(        'woocommerce_stripe',        'wc_stripe_params',        apply_filters('wc_stripe_params', $stripe->javascript_params())    );    $stripe->tokenization_script();    wp_enqueue_script('woocommerce_stripe');}wp_enqueue_script('wc-country-select');wp_enqueue_script('selectWoo');wp_enqueue_style('select2');$shippingMethods = WC()->shipping()->get_packages()[0]['rates'];$chosenMethod = isset(WC()->session->chosen_shipping_methods[0]) ? WC()->session->chosen_shipping_methods[0] : '';function business_day($days, $abbrv = false){    if($abbrv) {        return utf8_encode(strtolower(strftime('%a %e. %m.', strtotime(" $days weekdays"))));    }    return utf8_encode(strtolower(strftime('%A', strtotime(" $days weekdays"))));}function add_delivery_payment_info(){    printf('
'); printf('
'); printf('
'); printf('
Oggi non paghi niente!
'); printf('
Paghi alla consegna ?
'); printf('
'); printf(' '); printf('
'); printf('
');}add_action('woocommerce_review_order_before_submit', 'add_delivery_payment_info');?><div class="inpage-form" data-product-id="">

Modulo d’ordine

1): ?>
    <li class="inpage-form__option "> <input type="radio" name="quantity" id="option-" value="" data-regular-price="" data-price="" /> <div class="inpage-form__option-top" >
<label for="option-"> x a pezzo
<form name="checkout" method="post" class="checkout woocommerce-checkout" action="" enctype="multipart/form-data">

<label class="inpage-form__insurance inpage-form__extras" data-product-id=""> <path d="m21.286 5.618-2.75 3.5c-.168.214-.417.351-.688.377l-.098.005c-.237 0-.469-.084-.65-.241l-1.75-1.5c-.42-.359-.469-.991-.108-1.41.359-.419.

以上就是解决WooCommerce自定义结账表单在非预览模式下购物车为空的问题的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1261284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PHP处理MySQL查询结果 PHP获取数据库数据方法
上一篇 2025年12月10日 06:50:27
WooCommerce 自定义内页结账表单中购物车状态异常的排查与修复
下一篇 2025年12月10日 06:50:36

相关推荐

  • ao3怎么收藏文章_ao3将喜欢作品加入书签步骤

    首先登录AO3账户,进入喜欢的作品页面后点击“Bookmark this work”按钮,填写标签与备注并设置公开或私密权限后提交;可通过个人主页创建收藏夹分类管理书签,移动端操作流程相同但界面略有差异。 如果您在AO3(Archive of Our Own)上阅读到喜欢的文章,想要将其保存以便日后…

    2026年8月26日
    000
  • 无线路由器怎么设置密码_无线网络加密与密码设置教程

    设置无线路由器密码需登录管理界面,选择WPA2-PSK或WPA3加密方式,设置12位以上含大小写字母、数字和符号的强密码,并保存重启;避免使用WEP、默认密码和开启WPS,定期更换密码,可提升Wi-Fi安全性。 设置无线路由器密码的核心步骤是登录路由器的管理界面,找到无线设置或安全设置选项,然后输入…

    2026年8月26日
    000
  • Maestro函数执行指南

    Maestro函数执行指南Maestro函数执行指南Maestro函数执行指南Maestro函数执行指南

    首先,打开SQL Maestro应用程序,并建立与MySQL数据库的连接,以便进行后续操作。 接着,在程序界面的顶部菜单中找到并点击相应选项,以开启数据库浏览器窗口。 然后,从数据库列表中选择需要操作的目标数据库,并完成连接。 进入数据库后,展开对象树,定位到函数节点,准备执行相关管理任务。 在函数…

    2026年8月26日 用户投稿
    100
  • 苹果怎么换个浏览器的_iPhone更换默认浏览器应用教程

    从iOS 14起可更换默认浏览器,先下载Chrome、Edge等应用,进入设置→对应浏览器→“默认浏览器App”中选择该浏览器即可生效,测试链接打开方式确认设置成功。 ☞☞☞☞点击夸克ai手把手教你,操作像呼吸一样简单!☜☜☜☜☜ 想在 iPhone 上换掉 Safari,用 Chrome、Edge…

    2026年8月26日
    100
  • UC浏览器怎么保存网页为PDF文件_UC浏览器网页保存为PDF方法

    UC浏览器支持将网页保存为PDF,可通过三种方式实现:一、使用内置打印功能,点击菜单→打印→选择“保存为PDF”→打印并保存;二、通过分享功能调用WPS或Adobe等第三方应用导出为PDF;三、利用收藏与离线保存功能将网页缓存后,结合截图工具拼接成PDF。操作适用于小米14 Android 14环境…

    2026年8月26日
    100
  • 替代传统WebSocket解决方案(如Socket.io)

    websocket替代方案包括sse、webrtc、长轮询和mqtt。1. sse适合服务器推送数据,简单但单向。2. webrtc适用于低延迟p2p通信,但复杂。3. 长轮询适用于实时性要求不高的应用,兼容性好。4. mqtt适合物联网和移动应用,需额外支持。选择方案需根据项目需求决定。 在现代W…

    2026年8月26日
    200
  • Python爬虫抓取智联招聘(基础版)

    Python爬虫抓取智联招聘(基础版)Python爬虫抓取智联招聘(基础版)Python爬虫抓取智联招聘(基础版)Python爬虫抓取智联招聘(基础版)

    运行平台: WindowsPython版本: Python3.6IDE: Sublime Text其他工具: Chrome浏览器 1、网页分析 1.1 分析请求地址 以北京海淀区的Python工程师为例进行网页分析。打开智联招聘首页,选择北京地区,在搜索框输入”Python工程师&#82…

    2026年8月26日 用户投稿
    100
  • 无线路由器怎么连接_无线设备连接路由器WiFi教程

    连接无线设备到路由器需先找到Wi-Fi名称(SSID)和密码,通常印在路由器底部;打开设备的Wi-Fi设置,搜索并选择对应网络,输入正确密码即可连接。首次安装时,需将光猫网线接入路由器WAN口,通电后通过电脑或手机访问管理地址(如192.168.1.1),按向导设置上网方式、Wi-Fi名称与密码,并…

    2026年8月26日
    200
  • Windows 11,一个新功能,一场新屠杀!

    Windows 11,一个新功能,一场新屠杀!Windows 11,一个新功能,一场新屠杀!Windows 11,一个新功能,一场新屠杀!Windows 11,一个新功能,一场新屠杀!

    6月24日,微软正式发布了新一代操作系统:windows 11。距离上一代操作系统windows 10的发布,已经过去了6年。 新一代的操作系统中,包含了以下亮点: 采用了全新的用户界面设计、提升了触控体验改进了应用商店原生支持运行安卓应用移除对32位设备的支持,开启了一场新的竞争 如果要在这次的新…

    2026年8月26日 用户投稿
    100
  • 百度地图怎么查看我的贡献_百度地图个人贡献值查看方法

    1、打开百度地图点击头像进入个人中心,找到“我的贡献”查看记录和数值;2、若无入口可从“帮助与反馈”搜索跳转;3、也可通过电脑端服务中心登录账号查询上报记录及贡献值。 如果您在百度地图上进行过地点添加、信息修改或上传照片等操作,可能积累了个人贡献值,但不确定如何查看这些记录和数值,则可以通过以下方法…

    2026年8月26日
    100
  • 青豆云怎么添加账号?青豆视频会员共享号

    在如今这个信息爆炸的时代,云存储服务已经成为了我们生活中不可或缺的一部分。而青豆云作为一款备受欢迎的云存储平台,其便捷的操作和丰富的功能吸引了大量用户。如何才能在青豆云上成功添加账号呢?别急,下面我就为大家详细讲解一下青豆云添加账号的步骤,让你轻松上手! 一、注册账号 1. 访问青豆云官网 你需要打…

    2026年8月26日
    300
  • 惠普无线网卡驱动怎么安装 一招解决驱动问题

    惠普无线网卡驱动怎么安装 一招解决驱动问题惠普无线网卡驱动怎么安装 一招解决驱动问题惠普无线网卡驱动怎么安装 一招解决驱动问题惠普无线网卡驱动怎么安装 一招解决驱动问题

    在使用惠普(hp)笔记本电脑时,不少用户会遇到无法连接无线网络的问题,其中最常见的原因就是无线网卡驱动未安装或出现异常。尤其是在重装系统后,驱动丢失的情况更为普遍。那么,该如何安装惠普无线网卡驱动呢?下面将介绍几种简单有效的安装方式。 一、无线网卡驱动是什么? 无线网卡驱动相当于操作系统与无线网卡之…

    2026年8月26日 用户投稿
    100
  • iPhone16如何设置返回导航键

    一、打开设置界面 在手机主屏上找到标有“设置”的应用图标,轻触进入。这里是管理iPhone各项功能的核心区域。 二、进入系统管理菜单 在设置列表中向下滑动,定位到“系统”选项并点击进入。该菜单集中了与设备基础操作相关的配置功能。 三、查找导航功能设置 在“系统”页面中,寻找名为“导航”的功能入口。该…

    2026年8月26日
    100
  • 摄像机怎么恢复出厂设置_摄像机恢复出厂设置的操作步骤与注意事项

    恢复出厂设置可解决登录问题或清除配置,适用于转售设备。首先通过物理按键复位,适用于带Reset孔的摄像机,通电状态下长按5-10秒至指示灯红蓝闪烁即可;其次可通过Web界面操作,需登录同网段摄像机IP,在系统维护中点击恢复出厂设置;第三种方式为手机APP远程重置,解绑设备后重新添加并勾选强制恢复选项…

    2026年8月26日
    200
  • 如何解决HEIC/AVIF图片转换难题?使用Composer和heif-converter轻松搞定!

    可以通过一下地址学习composer:学习地址 告别 HEIC/AVIF 图片兼容性烦恼:用 Composer 玩转 heif-converter 相信很多朋友都有过这样的经历:朋友用 iphone 拍了张照片发给你,结果你发现它是个 .heic 文件。或者,你在网上下载了一些高质量的图片,发现它们…

    用户投稿 2026年8月26日
    100
  • 私信自动回复卡片违规吗?私信自动回复卡片违规吗安全吗

    随着社交媒体的普及,越来越多的人开始使用私信功能进行交流。近年来,一种名为“私信自动回复卡片”的现象在社交媒体上引起了广泛争议。这种自动回复卡片真的违规吗?本文将为您揭开这一谜团。 一、什么是私信自动回复卡片? 在社交媒体上,许多用户为了方便快捷地回复私信,会选择使用自动回复卡片。这种卡片通常包含一…

    2026年8月26日
    100
  • 大疆无人机怎么用后期处理_大疆无人机拍摄素材后期处理软件与流程

    使用大疆无人机航拍后,可通过DJI Mimo App快速剪辑并还原D-Log色彩,影忆实现全自动调色与AI字幕,DaVinci Resolve进行专业级调色优化,Photoshop合成AEB连拍HDR照片,Pix4Dmapper处理带POS信息的测绘影像,满足从短视频到专业建模的全流程需求。 如果您…

    2026年8月25日
    000
  • 如何在PHP应用中解决数据可视化难题,使用szymach/c-pchart轻松生成精美图表

    可以通过一下地址学习composer:学习地址 数据可视化:现代Web应用不可或缺的基石 想象一下,你正在构建一个管理后台,需要向用户展示复杂的业务数据,比如销售趋势、用户增长曲线、资源使用率等等。如果只是简单地罗列数字,用户很难快速理解数据背后的含义。这时,直观、美观的图表就成了连接数据与洞察力的…

    用户投稿 2026年8月25日
    000
  • 如何解决Magento2图片加载慢的问题,使用Composer和WebP模块让你的电商网站飞起来

    Composer在线学习地址:学习地址 痛点:电商网站的“甜蜜负担”——图片 在电商领域,高质量的产品图片是吸引顾客、促成转化的关键。然而,这些精美的图片也常常成为网站性能的“甜蜜负担”。当用户访问一个图片众多的商品列表页或详情页时,浏览器需要下载大量的图片资源,这直接导致页面加载时间过长。 我曾在…

    用户投稿 2026年8月25日
    100
  • 快看漫画网页版在线看:免安装,极速加载

    快看漫画网页版无需下载App即可在线追更,首页按分类推荐热门国漫如《难哄》《好一个乖乖女》,支持搜索直达《天命大反派》等作品最新话,页面适配手机流畅阅读,加载快速清晰度够用,WiFi下体验佳,部分章节有会员抢先提示但更新日后可免费看,偶有推广弹窗可关闭,整体干扰小。 打开快看漫画网页版,不用下载Ap…

    2026年8月25日
    000

发表回复

登录后才能评论
关注微信