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

基于WooCommerce搭建在线商城,求产品防伪认证查询功能实现方案

实现WooCommerce唯一编号查询认证详情的方案

我来帮你梳理一下实现这个功能的可行方案,不管是用现成插件还是自定义代码都能搞定,参考你提到的类似功能,下面分两种方式说明:

一、现成插件推荐

这些插件专门适配WooCommerce,能快速实现序列号查询+认证详情展示的需求:

  • WooCommerce Serial Numbers:这款插件主打序列号管理,支持给每个订单/产品绑定唯一编号,自带查询页面功能。用户输入编号后,可直接查看对应产品信息、购买日期、订单状态,还能自定义添加保修期限等专属字段,完全匹配你的需求。
  • YITH WooCommerce Serial Numbers:功能更丰富的序列号工具,支持批量导入编号、设置查询页面的样式模板,还能给不同产品配置不同的保修规则,适配大多数WooCommerce主题。
  • Advanced WooCommerce Serial Numbers:支持序列号的有效性验证,允许添加自定义元数据(比如保修截止日期、认证编号备注),并且提供短代码,可以把查询表单嵌入到任意页面,灵活性很高。

二、自定义代码实现方案

如果插件满足不了定制需求,你可以用以下代码自行开发,步骤清晰且可控:

1. 给订单添加唯一编号字段

首先在WooCommerce订单后台添加一个字段,用来存储每个订单对应的唯一认证编号:

// 在订单后台添加唯一编号输入框
add_action('woocommerce_admin_order_data_after_billing_address', 'add_serial_number_field_to_order');
function add_serial_number_field_to_order($order) {
    woocommerce_wp_text_input(array(
        'id' => '_serial_number',
        'label' => __('唯一认证编号', 'woocommerce'),
        'value' => get_post_meta($order->get_id(), '_serial_number', true),
        'wrapper_class' => 'form-field-wide'
    ));
}

// 保存订单的唯一编号字段
add_action('woocommerce_process_shop_order_meta', 'save_serial_number_field_to_order');
function save_serial_number_field_to_order($order_id) {
    if (!empty($_POST['_serial_number'])) {
        update_post_meta($order_id, '_serial_number', sanitize_text_field($_POST['_serial_number']));
    }
}

2. 创建查询表单短代码

通过短代码生成查询表单,你可以把这个短代码嵌入到任意页面中:

// 生成查询表单的短代码
add_shortcode('serial_number_checker', 'render_serial_checker_form');
function render_serial_checker_form() {
    ob_start();
    ?>
    <form id="serial-check-form" method="post">
        <p>
            <label for="serial-number"><?php _e('输入唯一认证编号:', 'woocommerce'); ?></label>
            <input type="text" id="serial-number" name="serial_number" required>
        </p>
        <button type="submit" name="check_serial"><?php _e('查询认证详情', 'woocommerce'); ?></button>
    </form>
    <div id="serial-results"></div>
    <?php
    return ob_get_clean();
}

3. 处理查询请求并返回详情

编写逻辑处理表单提交,查询对应编号的订单和产品信息,然后展示认证详情:

// 处理查询请求并返回结果
add_action('template_redirect', 'handle_serial_check_request');
function handle_serial_check_request() {
    if (isset($_POST['check_serial']) && !empty($_POST['serial_number'])) {
        $serial_number = sanitize_text_field($_POST['serial_number']);
        // 查询包含该编号的已完成订单
        $orders = get_posts(array(
            'post_type' => 'shop_order',
            'meta_key' => '_serial_number',
            'meta_value' => $serial_number,
            'posts_per_page' => 1,
            'post_status' => array('wc-completed')
        ));

        if (!empty($orders)) {
            $order = wc_get_order($orders[0]->ID);
            $items = $order->get_items();
            $product = wc_get_product($items[0]->get_product_id());
            
            // 组装详情HTML
            $result_html = '<div class="serial-result success">';
            $result_html .= '<h3>' . __('认证详情', 'woocommerce') . '</h3>';
            $result_html .= '<p><strong>' . __('产品名称:', 'woocommerce') . '</strong> ' . $product->get_name() . '</p>';
            $result_html .= '<p><strong>' . __('购买日期:', 'woocommerce') . '</strong> ' . wc_format_datetime($order->get_date_created()) . '</p>';
            $result_html .= '<p><strong>' . __('订单编号:', 'woocommerce') . '</strong> ' . $order->get_order_number() . '</p>';
            // 保修信息可从产品自定义字段获取(需提前给产品添加该字段)
            $warranty_info = get_post_meta($product->get_id(), '_warranty_info', true);
            if ($warranty_info) {
                $result_html .= '<p><strong>' . __('保修信息:', 'woocommerce') . '</strong> ' . $warranty_info . '</p>';
            }
            $result_html .= '</div>';
        } else {
            $result_html = '<div class="serial-result error">' . __('未找到对应的认证信息,请检查编号是否正确。', 'woocommerce') . '</div>';
        }

        echo $result_html;
        exit;
    }
}

4. 样式优化(可选)

添加CSS美化查询表单和结果展示:

#serial-check-form {
    max-width: 500px;
    margin: 2rem auto;
    padding: 2rem;
    border: 1px solid #eee;
    border-radius: 8px;
}
#serial-check-form label {
    display: block;
    margin-bottom: 0.5rem;
    font-weight: 600;
}
#serial-check-form input[type="text"] {
    width: 100%;
    padding: 0.8rem;
    margin-bottom: 1rem;
    border: 1px solid #ddd;
    border-radius: 4px;
}
#serial-check-form button {
    padding: 0.8rem 1.5rem;
    background: #2271b1;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
}
.serial-result {
    max-width: 500px;
    margin: 2rem auto;
    padding: 1.5rem;
    border-radius: 8px;
}
.serial-result.success {
    border: 1px solid #46b450;
    background: #f0fdf4;
}
.serial-result.error {
    border: 1px solid #dc3232;
    background: #fef0f0;
}

你可以把以上代码添加到主题的functions.php文件,或者使用Code Snippets插件来管理,避免主题更新丢失代码。

内容的提问来源于stack exchange,提问作者Rtangle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:45:20