基于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
相关产品推荐
相关产品推荐

