WooCommerce后台添加order-received URL按钮失败求助
WooCommerce订单完成页(order-received)URL显示问题排查与修复
问题背景
按照2年多前的教程操作后,不管是后台「订单详情页」还是前台「我的账户-订单列表」,都看不到带order-received URL的链接,大概率是WooCommerce版本更新导致函数/钩子变化,或是教程本身的操作存在局限性。
常见问题原因
- 模板修改无效:教程让改WooCommerce核心模板
woocommerce/templates/my-account/orders.php,但如果你的主题有自定义的WooCommerce子模板(路径是当前主题/woocommerce/my-account/orders.php),修改核心模板根本不会生效,而且WooCommerce更新还会覆盖核心模板的修改。 - 代码范围不对:教程里的代码只针对前台「我的账户」订单列表,完全没涉及后台订单页面,这就是你后台看不到链接的直接原因。
- 函数兼容性问题:旧版本的函数可能被调整,直接用
wc_get_endpoint_url拼接URL比依赖旧函数更稳妥。
修正方案
所有代码请添加到当前主题的functions.php文件,或使用Code Snippets这类自定义代码插件,不要修改WooCommerce核心文件。
一、前台「我的账户-订单列表」显示链接(替代教程步骤)
// 给前台我的账户订单列表添加自定义列 add_filter( 'woocommerce_account_orders_columns', 'add_order_received_url_column' ); function add_order_received_url_column( $columns ) { $columns['order-received-link'] = __( '订单完成页', 'woocommerce' ); return $columns; } // 渲染自定义列的按钮与链接 add_action( 'woocommerce_my_account_my_orders_column_order-received-link', 'render_order_received_url_column' ); function render_order_received_url_column( $order ) { // 生成带订单密钥的完成页URL $order_received_url = wc_get_endpoint_url( 'order-received', $order->get_id(), wc_get_checkout_url() ); $order_received_url = add_query_arg( 'key', $order->get_order_key(), $order_received_url ); echo '<a href="' . esc_url( $order_received_url ) . '" class="woocommerce-button button">查看订单完成页</a>'; }
二、后台订单列表显示链接
// 给后台订单列表添加自定义列 add_filter( 'manage_edit-shop_order_columns', 'add_admin_order_received_column' ); function add_admin_order_received_column( $columns ) { $columns['order-received-url'] = __( '订单完成页链接', 'woocommerce' ); return $columns; } // 渲染后台自定义列的链接 add_action( 'manage_shop_order_posts_custom_column', 'render_admin_order_received_column', 10, 2 ); function render_admin_order_received_column( $column, $post_id ) { if ( $column === 'order-received-url' ) { $order = wc_get_order( $post_id ); if ( $order ) { $order_received_url = wc_get_endpoint_url( 'order-received', $order->get_id(), wc_get_checkout_url() ); $order_received_url = add_query_arg( 'key', $order->get_order_key(), $order_received_url ); echo '<a href="' . esc_url( $order_received_url ) . '" target="_blank">打开链接</a>'; } } }
三、后台订单详情页添加按钮
// 在后台订单详情页添加订单完成页按钮 add_action( 'woocommerce_admin_order_data_after_order_details', 'add_order_received_button_in_admin' ); function add_order_received_button_in_admin( $order ) { $order_received_url = wc_get_endpoint_url( 'order-received', $order->get_id(), wc_get_checkout_url() ); $order_received_url = add_query_arg( 'key', $order->get_order_key(), $order_received_url ); echo '<div style="margin-top:15px;"> <a href="' . esc_url( $order_received_url ) . '" class="button" target="_blank">查看订单完成页</a> </div>'; }
注意事项
- 上述代码兼容WooCommerce 3.0及以上版本,最新版也可正常使用。
- 如果仍不显示,先禁用其他插件排查冲突,或检查主题是否覆盖了相关钩子。
内容的提问来源于stack exchange,提问作者Paulo do Porto
相关产品推荐
相关产品推荐

