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

如何向WooCommerce购物车添加URL?请指导该字段的实现方式

如何在WooCommerce购物车中添加URL字段并实现完整功能

嘿,我来帮你搞定在WooCommerce购物车页面添加URL字段的需求。这个场景挺实用的,比如让用户提供参考链接、设计稿地址之类的。下面是一步步的具体实现方法,所有代码都可以直接加到你的主题functions.php文件或者自定义插件里(千万别直接修改WooCommerce核心文件,不然更新插件就没了):


1. 在购物车页面添加URL输入字段

首先,我们要在购物车页面合适的位置插入一个URL输入框。这里用woocommerce_after_cart_table钩子,它会把字段放在购物车商品表格的下方,用户很容易注意到:

add_action('woocommerce_after_cart_table', 'add_custom_url_field_to_cart');
function add_custom_url_field_to_cart() {
    // 先获取已保存的URL(如果有的话)
    $saved_url = WC()->session->get('custom_cart_url');
    ?>
    <div class="custom-url-field">
        <p>
            <label for="cart_custom_url"><?php _e('参考URL(可选)', 'woocommerce'); ?></label>
            <input type="url" id="cart_custom_url" name="cart_custom_url" value="<?php echo esc_attr($saved_url); ?>" placeholder="https://example.com" style="width: 100%; max-width: 400px; padding: 8px;">
        </p>
    </div>
    <?php
}

这段代码会输出一个带标签的URL输入框,还会自动填充之前用户已经输入过的内容,体验更顺畅。


2. 保存URL字段值到购物车会话

光显示字段还不够,我们需要把用户输入的URL保存到WooCommerce的会话中,这样在整个购物流程里都能获取到这个值:

add_action('woocommerce_cart_updated', 'save_custom_url_field_to_session');
function save_custom_url_field_to_session() {
    // 检查是否有POST过来的URL值
    if (isset($_POST['cart_custom_url'])) {
        $custom_url = esc_url_raw($_POST['cart_custom_url']); // 安全处理URL,避免注入风险
        // 保存到会话
        WC()->session->set('custom_cart_url', $custom_url);
    }
}

这里用esc_url_raw过滤输入的URL,既保证格式符合规范,也能避免安全问题。


3. (可选)在结账页显示已填写的URL

如果你想让用户在结账页面再次确认自己填写的URL,可以加这段代码,把URL显示在订单摘要区域:

add_action('woocommerce_checkout_before_order_review', 'display_custom_url_in_checkout');
function display_custom_url_in_checkout() {
    $custom_url = WC()->session->get('custom_cart_url');
    if (!empty($custom_url)) {
        ?>
        <div class="custom-url-display">
            <p><strong><?php _e('你填写的参考URL:', 'woocommerce'); ?></strong><a href="<?php echo esc_url($custom_url); ?>" target="_blank"><?php echo esc_html($custom_url); ?></a></p>
        </div>
        <?php
    }
}

4. 将URL值保存到订单元数据

当用户完成结账后,我们需要把这个URL永久保存到订单里,这样后台管理员也能看到:

add_action('woocommerce_checkout_create_order', 'save_custom_url_to_order_meta');
function save_custom_url_to_order_meta($order) {
    $custom_url = WC()->session->get('custom_cart_url');
    if (!empty($custom_url)) {
        // 添加订单元数据(下划线开头表示私有元数据,不会在前台公开显示)
        $order->update_meta_data('_custom_cart_url', $custom_url);
        // 清除会话中的值(可选,避免下一次购物时自动填充旧URL)
        WC()->session->__unset('custom_cart_url');
    }
}

5. 在后台订单详情页显示URL

为了让管理员在后台查看订单时能快速找到这个URL,我们把它加到订单详情页的账单地址下方:

add_action('woocommerce_admin_order_data_after_billing_address', 'display_custom_url_in_admin_order');
function display_custom_url_in_admin_order($order) {
    $custom_url = $order->get_meta('_custom_cart_url');
    if (!empty($custom_url)) {
        ?>
        <div class="custom-url-admin">
            <p><strong><?php _e('参考URL:', 'woocommerce'); ?></strong><a href="<?php echo esc_url($custom_url); ?>" target="_blank"><?php echo esc_html($custom_url); ?></a></p>
        </div>
        <?php
    }
}

6. 在订单确认邮件中包含URL字段

最后,让用户和管理员在订单确认邮件里也能看到这个URL:

add_filter('woocommerce_email_order_meta_fields', 'add_custom_url_to_email', 10, 3);
function add_custom_url_to_email($fields, $sent_to_admin, $order) {
    $custom_url = $order->get_meta('_custom_cart_url');
    if (!empty($custom_url)) {
        $fields['custom_cart_url'] = array(
            'label' => __('参考URL', 'woocommerce'),
            'value' => '<a href="' . esc_url($custom_url) . '" target="_blank">' . esc_html($custom_url) . '</a>',
        );
    }
    return $fields;
}

测试提示

添加完代码后,记得走一遍完整流程测试:

  1. 添加商品到购物车
  2. 在购物车页面填写URL并点击「更新购物车」
  3. 进入结账页,确认URL是否正常显示(如果加了第3步的话)
  4. 完成结账,查看后台订单详情页是否有URL记录
  5. 检查订单确认邮件是否包含URL信息

内容的提问来源于stack exchange,提问作者Aydın Bircan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:09:55