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

WooCommerce二次开发:特定商品订单触发元数据存储与代码执行问题

WooCommerce 定制需求解决方案

一、满足条件时存储邮箱MD5值到用户元数据

实现逻辑:监听订单完成事件,校验订单是否包含指定商品,生成邮箱MD5后检查用户元数据,仅当不存在时存储。

add_action('woocommerce_order_status_completed', 'store_email_md5_on_qualified_order', 10, 1);
function store_email_md5_on_qualified_order($order_id) {
    $order = wc_get_order($order_id);
    if (!$order) return;

    // 校验订单是否包含目标商品ID
    $target_product_ids = [120, 260];
    $has_target_product = false;
    foreach ($order->get_items() as $item) {
        if (in_array($item->get_product_id(), $target_product_ids)) {
            $has_target_product = true;
            break;
        }
    }
    if (!$has_target_product) return;

    // 获取客户核心信息
    $customer_email = $order->get_billing_email();
    $user_id = $order->get_user_id();
    if (!$customer_email || !$user_id) return;

    // 生成标准化邮箱MD5值(转小写+去空格避免重复)
    $email_md5 = md5(strtolower(trim($customer_email)));

    // 检查用户元数据中是否已存在该值
    $existing_md5 = get_user_meta($user_id, 'customer_email_md5', true);
    if (empty($existing_md5)) {
        // 仅当不存在时存储
        update_user_meta($user_id, 'customer_email_md5', $email_md5);
    }
    // 若已存在,不执行存储操作,保留原有值
}

说明:

  • 仅在订单状态变为「已完成」(即支付成功且订单完成)时触发
  • 同一客户的多个符合条件订单,只会存储一次MD5值
  • MD5基于标准化后的邮箱生成,避免因大小写/空格导致的重复计算

二、下单后执行自定义PHP代码

通过监听结账完成事件,校验订单商品后执行指定代码:

add_action('woocommerce_checkout_order_processed', 'execute_custom_code_after_target_product_order', 10, 3);
function execute_custom_code_after_target_product_order($order_id, $posted_data, $order) {
    // 校验订单是否包含目标商品ID
    $target_product_ids = [120, 260];
    $has_target_product = false;
    foreach ($order->get_items() as $item) {
        if (in_array($item->get_product_id(), $target_product_ids)) {
            $has_target_product = true;
            break;
        }
    }
    if (!$has_target_product) return;

    // 执行自定义PHP代码
    $pro_message = 'Hi dear';
    echo $pro_message . ' custom php code';

    // 补充:若需要在前端显示消息,推荐使用WooCommerce内置通知函数
    wc_add_notice($pro_message . ' custom php code', 'notice');
}

说明:

  • 钩子woocommerce_checkout_order_processed在订单创建成功后立即触发,无需等待支付完成
  • 如果是后台/AJAX场景,echo内容可能无法直接显示,用wc_add_notice可确保消息在前端页面展示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:13:30