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

WooCommerce:为订单接收回调URL追加订单及订单项参数并获取值

WooCommerce 感谢页URL追加订单及订单项参数解决方案

我来帮你完善这段代码,实现从感谢页URL获取参数并追加订单/订单项参数的需求。下面是完整可运行的解决方案:

add_filter('woocommerce_get_checkout_order_received_url', 'override_return_url', 10, 2);
function override_return_url($return_url, $order){ 
    // 1. 解析原有URL的查询参数,避免丢失已存在的参数
    $url_parts = wp_parse_url($return_url);
    parse_str($url_parts['query'] ?? '', $existing_params);

    // 2. 追加订单级别的核心参数
    $order_params = array(
        'order_id' => $order->get_id(),
        'order_total' => $order->get_total(),
        'order_status' => $order->get_status()
    );

    // 3. 收集订单项参数(SKU、数量、价格等)
    $item_params = array();
    foreach($order->get_items() as $item_id => $item) { 
        // 获取当前订单项对应的产品(支持变体产品)
        $product = $item->get_product();
        if(!$product) continue;

        // 为每个商品生成唯一的参数键,避免冲突
        $prefix = 'product_' . $item->get_product_id() . '_';
        $item_params[$prefix . 'sku'] = $product->get_sku();
        $item_params[$prefix . 'quantity'] = $item->get_quantity();
        $item_params[$prefix . 'price'] = $item->get_subtotal();
    }

    // 4. 合并所有参数:原有参数 + 订单参数 + 订单项参数
    $new_params = array_merge($existing_params, $order_params, $item_params);

    // 5. 生成新的返回URL
    return add_query_arg($new_params, $url_parts['scheme'] . '://' . $url_parts['host'] . $url_parts['path']);
}

代码说明:

  • 保留原有参数:通过wp_parse_url和parse_str解析原URL的查询参数,确保不会覆盖或丢失之前已存在的参数
  • 订单级参数:追加了订单ID、订单总额、订单状态三个核心参数,你可以根据需求增减(比如添加订单创建时间)
  • 订单项参数:遍历每个订单项,获取对应产品的SKU、购买数量、单品小计,用产品ID作为参数前缀,避免不同商品的参数冲突
  • 安全生成URL:使用WooCommerce/WordPress内置的add_query_arg函数生成URL,自动处理参数编码,避免URL格式错误

在感谢页获取参数的方法:

当用户跳转到感谢页后,你可以通过$_GET全局变量获取这些参数,记得做好安全过滤:

// 获取订单ID
$order_id = isset($_GET['order_id']) ? sanitize_text_field($_GET['order_id']) : '';

// 获取某个商品的SKU(假设产品ID是123)
$product_123_sku = isset($_GET['product_123_sku']) ? sanitize_text_field($_GET['product_123_sku']) : '';

// 获取订单总额
$order_total = isset($_GET['order_total']) ? sanitize_text_field($_GET['order_total']) : '';

注意事项:

  • 如果你的网站启用了URL重写(伪静态),感谢页的URL格式可能是example.com/checkout/order-received/123/,此时原有参数可能在URL路径中,代码依然能正确解析
  • 对于敏感参数(比如订单总额),如果需要更高安全性,可以考虑对参数进行加密处理,避免前端篡改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:00:00