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

如何在WooCommerce单品页添加跳转至已购产品对应订单详情页的按钮?

问题:虚拟产品购买后隐藏加购按钮并跳转至对应订单详情页

我计划搭建一个售卖虚拟产品的网站,每个产品仅需购买一次即可永久下载。需求是:用户购买某产品后,隐藏该产品的加入购物车按钮,同时添加一个“下载”按钮,直接跳转至用户购买该产品的订单详情页(例如/my-account/view-order/624/)。

目前已实现隐藏加购按钮的代码:

add_filter( 'woocommerce_is_purchasable', 'bbloomer_deny_purchase_if_already_purchased', 9999, 2 );
  
function bbloomer_deny_purchase_if_already_purchased( $is_purchasable, $product ) {
   if ( is_user_logged_in() && wc_customer_bought_product( '', get_current_user_id(), $product->get_id() ) ) {
      $is_purchasable = false;
   }
   return $is_purchasable;
}

另外尝试添加跳转按钮,但只能跳转到下载列表页,代码如下:

add_action( 'woocommerce_single_product_summary', 'bbloomer_message_if_not_purchasable', 29 );
 
function bbloomer_message_if_not_purchasable() {
   global $product;
   if ( is_user_logged_in() && wc_customer_bought_product( '', get_current_user_id(), $product->get_id() ) ) {
      echo '<a class="button button_full_width button_download_single" href="https://youwebsite.com/my-account/downloads/"><span class="button_downloads">Go To download</span></a>';
   }
}

核心疑问:能否直接获取用户购买当前产品的历史订单号,实现跳转至对应订单详情页?


可行性说明

完全可行。WooCommerce提供了订单查询API,可以精准获取当前用户购买指定产品的有效订单,进而生成对应的订单详情页链接。

代码修改方案

保留原有隐藏加购按钮的代码,修改第二个函数,添加订单查询逻辑,替换跳转链接为对应订单详情页:

add_action( 'woocommerce_single_product_summary', 'replace_add_to_cart_with_order_link', 29 );
 
function replace_add_to_cart_with_order_link() {
    global $product;
    
    // 仅对已登录且已购买该产品的用户生效
    if ( !is_user_logged_in() || !wc_customer_bought_product( '', get_current_user_id(), $product->get_id() ) ) {
        return;
    }
    
    // 查询用户购买该产品的有效订单(状态为已完成/处理中)
    $orders = wc_get_orders( array(
        'customer_id' => get_current_user_id(),
        'status'      => array( 'wc-completed', 'wc-processing' ),
        'limit'       => 1, // 取第一个有效订单
        'return'      => 'ids',
        'line_items'  => array(
            array(
                'product_id' => $product->get_id(),
            )
        )
    ) );
    
    // 如果找到订单,生成详情页链接并输出按钮
    if ( !empty( $orders ) ) {
        $order_id = reset( $orders );
        $order_link = wc_get_endpoint_url( 'view-order', $order_id, get_permalink( wc_get_page_id( 'myaccount' ) ) );
        
        echo '<a class="button button_full_width button_download_single" href="' . esc_url( $order_link ) . '"><span class="button_downloads">查看订单并下载</span></a>';
    }
}

代码关键点说明:

  • 订单筛选:通过wc_get_orders筛选当前用户、包含目标产品、状态为已完成/处理中的订单,确保获取有效订单
  • 标准化链接:使用wc_get_endpoint_url生成兼容不同站点配置的订单详情页链接,避免硬编码URL的兼容性问题
  • 安全处理:用esc_url对链接进行转义,符合WordPress安全开发规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:35:35