WooCommerce我的账户页新客户无订单时额外循环引发显示异常
故障原因
- 核心触发点:当用户无任何历史订单时,代码中用到的
$last_order变量为null(不存在有效值),此时直接调用$last_order->get_items()会抛出PHP致命错误,直接中断页面渲染流程,所以会出现容器消失、后续内容不加载的问题。而有订单的用户$last_order是有效订单对象,代码可以正常执行,bug就自动消失了。 - 额外隐患:即使是有订单的场景,当前代码也存在稳定性问题:如果订单内的商品没有设置特色图,
$product->get_image_id()返回0,不会进入if分支给$item_name赋值,后续echo的时候会抛出「未定义变量」警告,也可能影响页面布局稳定性。
修复方案
先做双重判断再执行订单商品遍历逻辑,同时给变量加默认值即可解决问题,参考修复后代码:
<?php // 先判断用户是否存在有效最近订单 if ( $last_order instanceof WC_Order ) : foreach ($last_order->get_items() as $item) : $product = $item->get_product(); $thumbnail = $product->get_image(array(50, 50)); // 给item_name设置默认空值,避免未定义变量问题 $item_name = ''; if ($product->get_image_id() > 0) { $item_name = '<div class="item-thumbnail">' . $thumbnail . '</div>'; } echo $item_name . $item->get_name(); endforeach; else : // 无订单时输出提示,不会中断页面渲染 echo '<p>您还没有产生过任何订单</p>'; endif; ?>
内容的提问来源于stack exchange,提问作者Loris GFT
相关产品推荐
相关产品推荐

