Avada主题下WooCommerce感谢页二维码代码在functions.php中不生效求助
修复HTML转义问题:你的代码中使用了
<、"这类HTML转义字符,PHP输出时会将其当作纯文本,无法解析为<img>标签。把printf里的转义字符替换成正常HTML符号,修改后的代码如下:add_action( 'woocommerce_thankyou', 'display_order_received_qr_code', 10, 1 ); function display_order_received_qr_code( $order_id ) { $order = wc_get_order($order_id); // 先判断订单是否有效,避免无效订单导致代码中断 if ( !$order ) return; printf('<img class="qrcodecz" alt="QR platba" src="%s" />', add_query_arg( array( 'accountNumber' => '2202681982', 'bankCode' => '2010', 'amount' => $order->get_subtotal(), 'currency' => 'CZK', 'vs' => $order->get_order_number(), 'message' => 'svetvramu.cz', 'size' => 200, ), 'https://api.paylibo.com/paylibo/generator/czech/image' ), ); }验证钩子是否触发:在函数开头添加测试输出,确认
woocommerce_thankyou钩子是否正常执行:function display_order_received_qr_code( $order_id ) { echo '<p>测试钩子触发</p>'; // 原有代码... }如果感谢页显示"测试钩子触发",说明钩子正常,问题出在后续逻辑;如果没显示,检查主题是否重写了感谢页模板(
woocommerce/checkout/thankyou.php),确保模板中调用了do_action( 'woocommerce_thankyou', $order->get_id() )。确认订单对象有效性:保留代码中的
if ( !$order ) return;判断,避免直接访问感谢页URL但无有效订单ID时,代码因无效订单对象中断。测试API链接可用性:手动拼接API链接(用固定值替换订单相关变量),比如
https://api.paylibo.com/paylibo/generator/czech/image?accountNumber=2202681982&bankCode=2010&amount=100¤cy=CZK&vs=123&message=svetvramu.cz&size=200,在浏览器中打开确认是否能加载二维码图片,排查API是否正常响应。检查订单数据正确性:输出订单相关数据,确认
get_subtotal()、get_order_number()是否返回预期值:echo '<p>订单金额:'.$order->get_subtotal().'</p>'; echo '<p>订单号:'.$order->get_order_number().'</p>';如果数据为空或异常,可调整数据获取方法,比如用
$order->get_total()代替get_subtotal()(若需要订单总金额而非小计)。排查样式隐藏问题:通过浏览器开发者工具检查页面元素,确认
.qrcodecz类是否被CSS设置了display:none、opacity:0等隐藏属性。
内容的提问来源于stack exchange,提问作者pechyno

