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

WooCommerce开发:修改代码实现指定分类产品订单项元数据全部为空时发送自定义邮件

我来帮你完善这段代码,实现你需要的功能。下面是完整的解决方案,我会一步步拆解关键逻辑:

完整实现代码
// 订单处理中状态触发邮件
add_action('woocommerce_order_status_processing', 'send_a_custom_email', 20, 1 );
// 如需在订单保留状态触发,取消下面一行的注释
// add_action('woocommerce_order_status_on-hold', 'send_a_custom_email', 20, 1 );

function send_a_custom_email( $order_id ) {
    $order = wc_get_order( $order_id );
    $target_category_ids = array(115, 117, 555, 556, 789, 786, 554);
    $all_nome_file_empty = true; // 初始假设所有目标产品的元数据都为空

    foreach ( $order->get_items() as $item_id => $item ) {
        $product = $item->get_product();
        // 处理变体产品,用父ID判断分类
        $product_id_for_check = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id();
        
        // 检查当前产品是否属于目标分类
        if ( has_term( $target_category_ids, 'product_cat', $product_id_for_check ) ) {
            // 直接获取"Nome File"元数据,比遍历所有元数据更高效
            $nome_file_value = $item->get_meta('Nome File');
            
            // 如果元数据不为空,立刻标记状态并跳出循环(无需继续检查其他产品)
            if ( ! empty( trim( $nome_file_value ) ) ) {
                $all_nome_file_empty = false;
                break;
            }
        }
    }

    // 确认所有目标产品的"Nome File"都为空时,发送自定义邮件
    if ( $all_nome_file_empty ) {
        // 自定义邮件参数
        $recipient = get_option('admin_email'); // 默认发送到管理员邮箱,可替换为指定邮箱
        $email_subject = sprintf('提醒:订单 #%d 目标产品无Nome File元数据', $order->get_order_number());
        $email_content = sprintf(
            '<p>订单 #%d 中,所有指定分类的产品的"Nome File"元数据均为空,请及时处理。</p>
            <p>订单链接:<a href="%s">点击查看</a></p>',
            $order->get_order_number(),
            $order->get_edit_order_url()
        );
        $email_headers = array('Content-Type: text/html; charset=UTF-8');

        // 使用WooCommerce内置邮件函数发送,确保和系统邮件环境兼容
        wc_mail( $recipient, $email_subject, $email_content, $email_headers );
    }
}

关键逻辑说明

  1. 状态初始化:用$all_nome_file_empty = true先假设所有符合条件的产品元数据都为空,后续只要找到一个非空值就反转这个状态。
  2. 高效获取元数据:直接用$item->get_meta('Nome File')获取指定键的元数据,避免了你之前遍历所有格式化元数据的冗余操作。
  3. 提前终止循环:一旦发现某个目标产品的元数据不为空,立刻跳出循环,减少不必要的计算。
  4. 邮件兼容性:使用WooCommerce内置的wc_mail函数发送邮件,能自动继承系统的邮件配置(比如SMTP设置),比原生wp_mail更适配电商场景。

注意事项

  • 如果“Nome File”是产品级的元数据(而非订单项级),请将$item->get_meta('Nome File')替换为$product->get_meta('Nome File')。
  • 邮件的收件人、主题、内容都可以根据你的需求自由调整,比如添加订单客户信息、产品列表等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:14:07