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

如何替换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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:30:50