讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

剧云
剧云

中文短剧剧本制作平台

Seko
Seko

AI短剧一键生成成片

updream

一键生成高质量推广成片

定制WooCommerce邮件通知页脚:基于订单产品分类的条件化显示

梦伟姑娘_7319

梦伟姑娘_7319

发布时间:2025-10-19 12:33:24

|

655人浏览过

|

来源于php中文网

原创

定制WooCommerce邮件通知页脚:基于订单产品分类的条件化显示

本文详细介绍了如何在woocommerce中根据订单中包含的产品分类,条件性地定制客户收到的邮件通知页脚。通过利用woocommerce的`woocommerce_email_footer`钩子,并结合php的`array_intersect`函数,您可以高效地识别特定分类产品,进而插入个性化的页脚信息,提升邮件的专业性和信息传达的准确性。

引言:定制WooCommerce邮件页脚的需求

在电子商务运营中,WooCommerce的邮件通知是与客户沟通的重要渠道。有时,根据客户订单中包含的特定产品分类,我们需要在邮件通知(特别是订单确认邮件)的页脚部分显示不同的信息。例如,销售食品的商家可能需要针对包含生鲜产品的订单添加特殊的储存或配送说明;销售定制商品的商家可能需要提供额外的售后服务联系方式。这种条件化的内容显示能够增强邮件的个性化和相关性,提升客户体验。

本文将指导您如何通过WordPress主题的functions.php文件或自定义插件,安全且高效地实现这一功能。

核心原理:利用woocommerce_email_footer钩子

WooCommerce提供了一系列动作钩子(Action Hooks),允许开发者在不修改核心文件的情况下扩展其功能。woocommerce_email_footer钩子便是其中之一,它在WooCommerce所有邮件模板的页脚内容渲染之前触发。这个钩子会传递多个参数,包括$order(订单对象)、$sent_to_admin(是否发送给管理员)、$plain_text(是否为纯文本邮件)和$email(邮件对象),这些参数为我们获取订单详情和邮件上下文提供了便利。

获取订单产品分类

要实现条件化显示,首先需要获取订单中所有产品的分类。这需要我们遍历订单中的每一个商品项,然后查询该商品所属的分类。

以下是获取订单产品分类的基本步骤:

DeepBI DHTML 页面生成器
DeepBI DHTML 页面生成器

生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur

下载
  1. 获取订单商品项: 通过$order->get_items()方法获取订单中的所有商品。
  2. 遍历商品项: 对每个商品项,获取其对应的产品ID。
  3. 查询产品分类: 使用wp_get_post_terms()函数,根据产品ID和分类法(product_cat)获取所有关联的分类术语(term)。
  4. 收集分类名称: 将获取到的分类术语的名称(或ID、slug)收集到一个数组中,以便后续进行比较。

关键修正:正确判断分类是否存在

在实现条件判断时,一个常见的错误是in_array函数的使用方式。in_array函数用于检查一个值是否存在于一个数组中,其基本语法是in_array(mixed $needle, array $haystack)。如果需要检查多个目标分类中的任意一个是否存在于订单产品分类中,直接将多个目标分类作为$needle参数传入in_array是错误的。

正确的做法是使用array_intersect函数。array_intersect函数返回一个数组,其中包含两个或更多数组中所有共同的值。如果array_intersect的结果不为空,则表示订单中包含至少一个目标分类。

完整的解决方案代码

下面是一个完整的PHP代码示例,您可以将其添加到子主题的functions.php文件或自定义插件中。

/**
 * 根据订单产品分类条件性地添加WooCommerce邮件页脚内容。
 *
 * @param WC_Order $order          订单对象。
 * @param bool     $sent_to_admin  是否发送给管理员。
 * @param bool     $plain_text     是否为纯文本邮件。
 * @param WC_Email $email          邮件对象。
 */
function custom_woocommerce_email_footer_by_category( $order, $sent_to_admin, $plain_text, $email ) {
    // 定义您希望触发自定义页脚的目标产品分类名称数组。
    // 请确保这些分类名称与您WooCommerce后台设置的分类名称完全匹配。
    $target_categories = array(
        'Farm Shop',
        'Cowdray Kitchen',
        'Cowdray Living',
        'The Meditator',
        'Cowdray Hampers',
        'Cowdray Supper Kits',
        'Grocery',
        'Butchery',
        'Deli',
        'Pantry',
        'Houseplants and Flowers',
        'Picnic Hampers',
        'Afternoon Tea',
        'Drinks',
        'Wreaths',
    );

    $ordered_product_category_names = array();

    // 遍历订单中的所有商品项
    foreach ( $order->get_items() as $item ) {
        // 获取商品对应的产品对象
        $product = $item->get_product();

        // 确保产品存在且有效
        if ( $product ) {
            // 获取产品所属的所有分类术语(term objects)
            $terms = wp_get_post_terms( $product->get_id(), 'product_cat' );

            // 遍历每个分类术语并收集其名称
            foreach ( $terms as $term ) {
                $ordered_product_category_names[] = $term->name;
            }
        }
    }

    // 移除重复的分类名称,避免不必要的比较
    $ordered_product_category_names = array_unique( $ordered_product_category_names );

    // 使用 array_intersect 检查目标分类与订单产品分类是否有交集
    // 如果交集不为空,则表示订单中包含至少一个目标分类
    if ( ! empty( array_intersect( $target_categories, $ordered_product_category_names ) ) ) {
        // 输出您希望显示的自定义页脚内容
        echo 'Cowdray Farm Shop Ltd<br>VAT Number: 970407718';
    }
}

// 将自定义函数挂载到 woocommerce_email_footer 动作钩子上
// 优先级设置为10,参数数量设置为4
add_action( 'woocommerce_email_footer', 'custom_woocommerce_email_footer_by_category', 10, 4 );

代码解析

  1. custom_woocommerce_email_footer_by_category($order, $sent_to_admin, $plain_text, $email)函数定义: 这是我们的核心函数,它将在WooCommerce邮件页脚处执行。
  2. $target_categories数组: 定义了一个包含所有目标分类名称的数组。您需要根据自己的需求修改这些分类名称。
  3. $ordered_product_category_names数组: 初始化一个空数组,用于存储订单中所有产品的分类名称。
  4. 遍历订单商品: foreach ( $order->get_items() as $item )循环遍历订单中的每一个商品项。
  5. 获取产品对象和ID: $product = $item->get_product();获取当前商品项对应的产品对象。$product->get_id()获取产品ID。
  6. 获取产品分类: wp_get_post_terms( $product->get_id(), 'product_cat' )根据产品ID和分类法product_cat获取所有关联的分类术语。
  7. 收集分类名称: 内部foreach循环遍历获取到的分类术语,并将它们的名称添加到$ordered_product_category_names数组中。
  8. array_unique(): 调用array_unique()是为了移除$ordered_product_category_names中可能存在的重复分类名称,这有助于提高后续比较的效率。
  9. array_intersect()判断:
    • array_intersect( $target_categories, $ordered_product_category_names )计算两个数组的交集。
    • ! empty(...)检查交集数组是否为空。如果交集不为空,则表示订单中至少包含一个$target_categories中定义的分类。
  10. 输出自定义内容: 如果条件满足,echo语句将输出您预设的自定义页脚文本。您可以根据需要修改这部分HTML内容。
  11. add_action(): 将自定义函数挂载到woocommerce_email_footer动作钩子上,确保在邮件页脚生成时执行。10是优先级,4是函数接受的参数数量。

部署与注意事项

  • 代码位置: 强烈建议将此代码放置在子主题的functions.php文件中,而不是直接修改父主题。这样可以确保在主题更新时您的自定义代码不会丢失。更好的做法是创建一个自定义插件来管理此类功能,以实现更高的模块化和可维护性。
  • 分类名称匹配: 确保$target_categories数组中的分类名称与您WooCommerce后台设置的产品分类名称完全一致,包括大小写和特殊字符。
  • 性能考量: 对于大多数网站而言,此代码的性能影响可以忽略不计。但如果您的订单包含数百个甚至上千个商品(这在WooCommerce中并不常见),并且产品分类数量巨大,则可能需要考虑进一步的优化。
  • 替代方案: 如果您希望根据分类ID或分类slug而不是名称进行判断,可以修改代码中收集分类信息的部分,将$term->name替换为$term->term_id或$term->slug。相应地,$target_categories数组也需要包含对应的ID或slug。

总结

通过上述方法,您可以灵活地根据订单中包含的产品分类,在WooCommerce邮件通知的页脚部分插入定制化的信息。这不仅提升了客户邮件的专业性和相关性,也为商家提供了更精细化的沟通手段。遵循本文提供的代码和最佳实践,您将能够安全、高效地实现这一功能,为您的WooCommerce商店带来更好的用户体验。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

SoundView
SoundView Hot

SoundView是一款面向跨境电商的视频翻译、配音和本地化 AI 创作平台。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

838

2025.12.04

wordpress seo
wordpress seo

WordPress网站SEO优化方法有:1、选择一个SEO友好的主题,具有清晰的代码结构,快速的加载速度和响应式设计;2、使用SEO插件,优化你的标题标签,元描述,关键字,XML站点地图等;3、优化你的内容,内容是SEO优化的核心;4、优化你的网站速度;5、创建友好的URL;6、使用内部链接;7、优化图像;8、使用社交媒体;9、定期更新你的网站;10、监控和分析你的网站等等。

6835

2023.09.18

wordpress下载后怎么安装
wordpress下载后怎么安装

安装前准备:确保服务器满足要求、获取安装文件、创建数据库。上传 wordpress 文件。创建数据库和用户。运行安装程序:选择语言、输入数据库信息、网站标题和管理员信息。安装 wordpress。安装后配置:设置永久链接、安装主题、安装插件、创建内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6899

2024.04.15

WordPress插件教程
WordPress插件教程

本专题整理热门WordPress插件资源,涵盖SEO优化、缓存加速、安全防护、表单管理、电商扩展等插件推荐与使用教程。

338

2026.06.16

WordPress建站教程大全
WordPress建站教程大全

本专题汇总WordPress教程相关内容,包括WordPress安装教程、建站教程、使用技巧、网站管理经验和实战案例,帮助用户快速掌握WordPress建站与运营方法。

900

2026.06.16

WordPress开发教程
WordPress开发教程

本专题提供WordPress开发技术资料,包括主题开发、插件开发、自定义功能开发、API调用及性能优化等内容。

1058

2026.06.16

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

Go-Zero安装与goctl环境配置教程
Go-Zero安装与goctl环境配置教程

本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。

0

2026.11.12

Go-Zero零基础入门教程
Go-Zero零基础入门教程

本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。

20

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn