0

0

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

DDD

DDD

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

|

595人浏览过

|

来源于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(邮件对象),这些参数为我们获取订单详情和邮件上下文提供了便利。

获取订单产品分类

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

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

Sora
Sora

Sora是OpenAI发布的一种文生视频AI大模型,可以根据文本指令创建现实和富有想象力的场景。

下载
  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
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商店带来更好的用户体验。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2647

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1657

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1515

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1418

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1448

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1306

2023.11.13

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号