You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress Twig模板渲染view-order页订单ID固定不更新问题

问题原因
  • 参数键名不匹配:WooCommerce 不同页面端点的查询变量规则不一致,你在短代码里是通过get_query_var('view-order')读取订单ID,但Twig代码里错误读取了system.get.order_id参数。my-orders、my-downloads页面路由本身用order_id作为参数键名所以能正常运行,view-order页面的订单ID参数键名是view-order,直接照搬旧逻辑拿不到正确的动态ID。
  • 冗余嵌套循环导致渲染异常:你为了输出订单ID嵌套了order.get_items、order.get_downloadable_items两层循环,当访问的订单没有可下载商品时,循环不会执行,内部的ID输出代码根本不会触发;如果订单有多个可下载商品,同一个ID还会重复输出多次。
  • 全局对象取值不可靠:Twig代码里通过全局$post对象拿ID,但view-order是依附于“我的账户”页面的路由端点,全局主查询返回的是“我的账户”页面对应的文章对象,不是订单对象,出现页面缓存或者主查询未重置的情况时,就会一直固定输出第一次加载拿到的ID,不会随访问的订单切换更新。
修复方案

把Twig模板代码替换为以下内容,取值逻辑和你正常运行的短代码完全对齐,去掉冗余逻辑:

{# 读取view-order查询变量中的订单ID,做整数校验和短代码逻辑一致 #}
{% set order_id = system.get['view-order']|absint %}
{% set order = order_id|php('wc_get_order') %}

{# 先判断订单对象是否有效,直接输出ID,去掉多余循环 #}
{% if order is not null %}
<div>{{ order.get_id() }}</div>
{% endif %}
注意事项
  • 不要在WooCommerce账户端点页面依赖全局$post对象拿订单相关数据,这类端点的主查询不是订单自定义文章类型,直接读全局对象很容易出现取值错误。
  • 跨页面复用Twig逻辑时,要先确认对应页面的路由参数键名、全局对象规则是否一致,不要直接硬抄其他页面的代码。

内容的提问来源于stack exchange,提问作者Snorlax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:57:19