如何在WooCommerce感谢页创建发送订单至WhatsApp的链接?
修复WooCommerce感谢页的WhatsApp订单链接问题
你的代码存在几个关键问题导致无法正常运行,以下是具体修正方案:
问题分析
get_checkout_order_received_url是类方法,必须加括号调用,原代码缺少执行括号- 变量
$link未初始化就使用.=拼接,会触发PHP未定义变量警告 - WhatsApp链接中的文本未做URL编码,空格等特殊字符会破坏链接结构
- 未校验
$order是否为合法的WC_Order对象,可能引发非预期报错
修正后的代码
add_action( 'woocommerce_thankyou', 'send_order_link' ); function send_order_link( $order_id ) { // 通过订单ID获取WC_Order对象 $order = wc_get_order( $order_id ); // 校验订单对象有效性,避免非法ID报错 if ( ! $order instanceof WC_Order ) return; // 获取订单完成页的完整URL $order_url = $order->get_checkout_order_received_url(); // 构造消息内容并做URL编码,确保特殊字符不破坏链接 $message = urlencode( "这是我的订单:{$order_url}" ); // 拼接完整的WhatsApp链接 $whatsapp_link = "https://wa.me/5513123456789?text={$message}"; // 输出安全转义后的链接HTML echo '<p><a href="' . esc_url( $whatsapp_link ) . '" target="_blank" rel="noopener">发送订单至WhatsApp</a></p>'; }
关键修改说明
- 改用
wc_get_order( $order_id )获取订单对象,woocommerce_thankyou钩子默认传入的是订单ID而非直接的WC_Order对象,此写法兼容性更强 - 添加订单对象有效性校验,避免非法参数导致的错误
- 使用
urlencode()处理消息内容,确保空格、特殊字符不会破坏URL结构 - 用
esc_url()对最终链接做安全转义,符合WordPress安全开发规范 - 直接初始化并赋值变量,避免未定义变量的警告
内容的提问来源于stack exchange,提问作者Rodrigo Sanches Wolpert
相关产品推荐
相关产品推荐

