如何替换WooCommerce的Add to Cart链接跳转至卖家自有网站产品页?
解决方案
1. 先给卖家添加外部购买链接字段
如果你的Dokan卖家账户还没有专属产品页链接的存储字段,可以通过以下代码在卖家设置页面添加一个自定义输入框,用于保存卖家的外部购买地址:
// 在Dokan卖家设置页面添加外部购买链接字段 add_action( 'dokan_seller_settings_after', 'add_seller_external_purchase_url' ); function add_seller_external_purchase_url() { $vendor_id = get_current_user_id(); $saved_url = get_user_meta( $vendor_id, '_vendor_external_purchase_url', true ); ?> <div class="dokan-form-group"> <label for="external_purchase_url" class="dokan-w3 dokan-control-label">外部购买链接</label> <div class="dokan-w5"> <input type="url" name="external_purchase_url" id="external_purchase_url" value="<?php echo esc_url( $saved_url ); ?>" class="dokan-form-control" placeholder="输入你的店铺购买链接" /> </div> </div> <?php } // 保存卖家填写的外部购买链接 add_action( 'dokan_save_seller_settings', 'save_seller_external_purchase_url', 10, 2 ); function save_seller_external_purchase_url( $vendor_id, $post_data ) { if ( isset( $post_data['external_purchase_url'] ) ) { update_user_meta( $vendor_id, '_vendor_external_purchase_url', esc_url_raw( $post_data['external_purchase_url'] ) ); } else { delete_user_meta( $vendor_id, '_vendor_external_purchase_url' ); } }
2. 修改单品页的Add to Cart按钮
通过WooCommerce钩子替换默认按钮为跳转链接,无需直接修改模板文件:
// 替换单品页Add to Cart按钮为卖家外部链接 add_filter( 'woocommerce_single_product_add_to_cart_button', 'replace_single_product_add_to_cart' ); function replace_single_product_add_to_cart( $button_html ) { global $product; // 获取当前产品所属卖家ID $vendor_id = dokan_get_product_author( $product->get_id() ); // 获取卖家的外部购买链接 $external_url = get_user_meta( $vendor_id, '_vendor_external_purchase_url', true ); if ( ! empty( $external_url ) ) { $button_html = sprintf( '<a href="%s" class="button alt" target="_blank" rel="noopener noreferrer">前往卖家店铺购买</a>', esc_url( $external_url ) ); } return $button_html; }
3. 修改商品归档网格的Add to Cart按钮
同样用钩子处理归档页、分类页等网格布局里的按钮:
// 替换归档页产品网格中的Add to Cart按钮 add_filter( 'woocommerce_loop_add_to_cart_link', 'replace_loop_add_to_cart', 10, 2 ); function replace_loop_add_to_cart( $button_html, $product ) { $vendor_id = dokan_get_product_author( $product->get_id() ); $external_url = get_user_meta( $vendor_id, '_vendor_external_purchase_url', true ); if ( ! empty( $external_url ) ) { $button_html = sprintf( '<a href="%s" class="button" target="_blank" rel="noopener noreferrer">前往卖家店铺购买</a>', esc_url( $external_url ) ); } return $button_html; }
4. 可选:彻底禁用站内交易
如果要完全关闭站内购物功能,可添加以下代码禁止访问购物车和结账页面:
// 禁用购物车与结账页面 add_action( 'template_redirect', 'disable_woocommerce_cart_checkout' ); function disable_woocommerce_cart_checkout() { if ( is_cart() || is_checkout() ) { wp_redirect( home_url() ); exit; } } // 移除页面上的购物车相关元素 remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10 ); remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10 ); remove_action( 'woocommerce_sidebar', 'woocommerce_get_sidebar', 10 );
注意事项
- 所有代码请放在子主题的functions.php或自定义插件中,避免主题更新导致代码丢失。
- 若你已经用其他方式(如ACF)添加了卖家链接字段,请将代码中的
_vendor_external_purchase_url替换为你实际使用的字段名。 - 可根据主题样式调整按钮的
class属性,确保按钮样式和网站统一。
内容的提问来源于stack exchange,提问作者Morgane-LEP
相关产品推荐
相关产品推荐

