如何在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
相关产品推荐
相关产品推荐

