将 Woocommerce 购物车项目自定义数据保存为订单项目元数据,将其显示在订单和电子邮件上

2024-05-26

关于 Woocommerce。我有要添加到购物车的自定义数据。在functions.php 文件中,我有以下函数。

// Display cart item custom data in cart and checkout pages
add_filter( 'woocommerce_get_item_data', 'display_cart_item_custom_on_cart_and_checkout', 10, 2 );
function display_cart_item_custom_on_cart_and_checkout( $cart_item_data, $cart_item ){
    
    if( isset($cart_item['custom_data']['label0']) && isset($cart_item['custom_data']['value0']) ) {
        $cart_item_data[] = array(
            'name' => $cart_item['custom_data']['label0'],
            'value' => $cart_item['custom_data']['value0'],
        );
    }
    
    if( isset($cart_item['custom_data']['label']) && isset($cart_item['custom_data']['value']) ) {
        $cart_item_data[] = array(
            'name' => $cart_item['custom_data']['label'],
            'value' => $cart_item['custom_data']['value'],
        );
    }

    if( isset($cart_item['custom_data']['label2']) && isset($cart_item['custom_data']['value2']) ) {
        $cart_item_data[] = array(
            'name' => $cart_item['custom_data']['label2'],
            'value' => $cart_item['custom_data']['value2'],
        );
    }
    
    if( isset($cart_item['custom_data']['label3']) && isset($cart_item['custom_data']['value3']) ) {
        $cart_item_data[] = array(
            'name' => $cart_item['custom_data']['label3'],
            'value' => $cart_item['custom_data']['value3'],
        );
    }
    
    if( isset($cart_item['custom_data']['label4']) && isset($cart_item['custom_data']['value4']) ) {
        $cart_item_data[] = array(
            'name' => $cart_item['custom_data']['label4'],
            'value' => $cart_item['custom_data']['value4'],
        );
    }
    
    if( isset($cart_item['custom_data']['label5']) && isset($cart_item['custom_data']['value5']) ) {
        $cart_item_data[] = array(
            'name' => $cart_item['custom_data']['label5'],
            'value' => $cart_item['custom_data']['value5'],
        );
    }
    
    if( isset($cart_item['custom_data']['label6']) && isset($cart_item['custom_data']['value6']) ) {
        $cart_item_data[] = array(
            'name' => $cart_item['custom_data']['label6'],
            'value' => $cart_item['custom_data']['value6'],
        );
    }
    
    if( isset($cart_item['custom_data']['label7']) && isset($cart_item['custom_data']['value7']) ) {
        $cart_item_data[] = array(
            'name' => $cart_item['custom_data']['label7'],
            'value' => $cart_item['custom_data']['value7'],
        );
    }
    
    if( isset($cart_item['custom_data']['label8']) && isset($cart_item['custom_data']['value8']) ) {
        $cart_item_data[] = array(
            'name' => $cart_item['custom_data']['label8'],
            'value' => $cart_item['custom_data']['value8'],
        );
    }
    
    if( isset($cart_item['custom_data']['label9']) && isset($cart_item['custom_data']['value9']) ) {
        $cart_item_data[] = array(
            'name' => $cart_item['custom_data']['label9'],
            'value' => $cart_item['custom_data']['value9'],
        );
    }
    
    if( isset($cart_item['custom_data']['label10']) && isset($cart_item['custom_data']['value10']) ) {
        $cart_item_data[] = array(
            'name' => $cart_item['custom_data']['label10'],
            'value' => $cart_item['custom_data']['value10'],
        );
    }
    return $cart_item_data;
}

这有效并且自定义数据显示在购物车中。但是,自定义数据不会显示在订单和订单电子邮件中。我在 Stackoverflow 上看到了几个为这个问题提供解决方案的答案,但我无法让它们适合我的情况。我参考的解决方案是。

在 Woocommerce 中保存并显示订单项自定义元数据 https://stackoverflow.com/questions/53687705/save-and-display-order-item-custom-meta-data-in-woocommerce

在 Woocommerce 购物车、结帐和订单上显示并保存添加的自定义购物车项目数据 https://stackoverflow.com/questions/54505642/display-and-save-added-custom-cart-item-data-on-woocommerce-cart-checkout-and-o

有人可以告诉我“我的”功能应该是什么吗?

谢谢。


首先,您可以这样优化和压缩您的函数:

// Display cart item custom data in cart and checkout pages
add_filter( 'woocommerce_get_item_data', 'display_cart_item_custom_on_cart_and_checkout', 10, 2 );
function display_cart_item_custom_on_cart_and_checkout( $cart_item_data, $cart_item ){
    $keys = array('0','','2','3','4','5','6','7','8','9','10'); // Fields numbers part keys array
    
    // Loop through Fields numbers part keys array
    foreach( $keys as $key ) {
        if( isset($cart_item['custom_data']['label'.$key]) && isset($cart_item['custom_data']['value'.$key]) ) {
            $cart_item_data[] = array(
                'name' => $cart_item['custom_data']['label'.$key],
                'value' => $cart_item['custom_data']['value'.$key],
            );
        }
    }
    return $cart_item_data;
}

然后,要将所有自定义购物车商品数据保存为自定义订单商品元数据并在订单和电子邮件中的任何位置显示它,请使用以下命令:

// Save cart item custom data as order item meta data and display it everywhere in Orders and email notifications
add_action('woocommerce_checkout_create_order_line_item', 'save_as_custom_order_item_meta_data', 10, 4 );
function save_as_custom_order_item_meta_data( $item, $cart_item_key, $values, $order ) {
    $keys = array('0','','2','3','4','5','6','7','8','9','10'); // Fields numbers part keys array()
    
    // Loop through Fields numbers part keys array
    foreach( $keys as $key ) {
        if( isset( $values['custom_data']['label'.$key] ) && isset( $values['custom_data']['value'.$key] ) ) {
           $item->update_meta_data( $values['custom_data']['label'.$key], $values['custom_data']['value'.$key] );
        }
    }
}

代码位于活动子主题(或活动主题)的functions.php 文件中。它应该有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Woocommerce 购物车项目自定义数据保存为订单项目元数据,将其显示在订单和电子邮件上 的相关文章

  • 保存多对多关系,同步/附加不存在?

    我有以下两个多对多关系的模型 use Illuminate Database Eloquent Model class Permission extends Model The database table used by the mode
  • 如何使用 PHP 对字符串进行 rot13 处理?

    我有一个很大的 php 代码 我想手动对其进行编码和解码 我的问题是 php 代码里面有很多单引号和双引号 因此我在使用时出现错误str rot13 功能如下 那么正确的语法是什么以及如何使用下面的函数进行编码 str rot13 That
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio
  • 使用 php-ews(Exchange Web 服务)在特定日期后获取电子邮件

    在我的 PHP 脚本中 我需要弄清楚如何检索指定消息 ID 之后或特定日期之后的所有电子邮件 两者都可以 我只需要检索自上次抓取收件箱以来的新电子邮件 这个收件箱每天收到数千封电子邮件 而且我在 30 天内无法删除任何电子邮件 对于初始导入
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2
  • PHP MongoDb 驱动程序:如何设置执行代码的超时

    我有以下代码 它在 MongoDb 端执行一段代码 mongoCode new MongoCode Some JS code db gt execute mongoCode array socketTimeoutMS gt 1000000
  • Yii2 - 错误请求 (#400) |前端和后端cookie

    仅当我打开时才会出现此问题frontend and backend在相同的browser 设想 与后端交互 gt 切换选项卡 gt 与前端交互 gt 切换选项卡返回 gt 与后端交互 gt 错误请求 400 Cookie 后端 identi
  • AWS-PHP-SDK / SNS 直接寻址返回错误

    您好 我正在使用 Laravel 4 设置来利用 AWS SNS 向我的 iOS 设备发送推送消息 从 AWS 控制台向我的设备发布命令效果很好 然后我尝试从 PHP sns AWS get sns sns gt publish array
  • 如何使用 PHP 构建正确的 SOAP 请求

    我需要格式化 构建此 SOAP 服务 的请求 http api notificationmessaging com NMSOAP NotificationService wsdl http api notificationmessaging
  • PHP:读取所有传入 HTTP 请求的类 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Xdebug V3 不会停止 VSCode 中的断点

    我正在尝试使用 VSCode 在 XAMPP 上进行调试 但没有成功 我知道有很多关于这个的问题 我已经尽了一切努力 但仍然行不通 我的 xdebug 扩展确实有一件奇怪的事情 我目前使用 PHP v7 4 12 和 Xdebug 版本 3
  • 如何从网站网址中隐藏 .html 扩展名

    我知道这个问题以前曾被问过 但有人知道隐藏 html 扩展名的好方法吗 我已经尝试了许多代码和许多答案https stackoverflow com https stackoverflow com 但我没有看到结果 那是我再问你一次 我有一
  • 如何在 GitHub Action 中使用不同版本的 PHP 进行测试

    我有一些 PHP 代码 其中包含使用以下命令运行的测试PHPUnit并想对其进行测试GitHub Actions 我在他们的文档中找不到测试 PHP 包的方法 我想使用不同版本的 PHP 进行测试 但他们只有最新的版本7 3安装 您可以添加
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F
  • CodeIgniter:My_Lang 中的 get_instance

    我发现这个有用的国际化代码 http pastebin com SyKmPYTX http pastebin com SyKmPYTX 一切正常 除了我无法在此类中使用 CI 函数 我想从 DB 设置 languages 和 special
  • PHP 接口有属性吗?

    PHP 中的接口有属性 还是只有方法 您可以在 DocBlock 中为接口声明属性 然后 IDE 将提示接口的这些属性 PhpStorm 会这样做 但这不会强制在实现类中实际实现这些字段 例如 property string passwor
  • Jquery一键提交多个同名表单

    我有动态创建的循环表单 我需要一键提交所有表单 我正在遵循下面的代码 你能建议我怎么做吗 谢谢
  • 通过 htaccess 将 PNG 解析为 PHP 仅适用于本地服务器,但不适用于网络服务器

    我用 PHP 创建了一个动态 PNG 图片 为了使用 PNG 扩展名 我创建了一个包含以下内容的 htaccess 文件 AddType application x httpd php png 在我的本地 XAMPP 服务器上 一切工作正常
  • PHP更改小数点分隔符

    在某些情况下 PHP 会在操作后更改小数点分隔符 下面是一个示例 为什么小数点分隔符变成 这是一个多语言网站 在西班牙语版本中 区域设置设置为西班牙语 es ES 小数点分隔符为 这就是为什么正在改变 解决方案是强制 LC NUMERIC
  • 如何从日期中查找该月的最后一天?

    如何在 PHP 中获取该月的最后一天 Given a date 2009 11 23 我要2009 11 30 并给出 a date 2009 12 23 我要2009年12月31日 t返回给定日期所在月份的天数 请参阅的文档date ht

随机推荐

  • 如何推导出 alpha-beta 剪枝的时间复杂度?

    我了解极小极大和 alpha beta 剪枝的基础知识 在所有文献中 他们谈论最佳情况的时间复杂度是 O b d 2 其中 b 分支因子 d 树的深度 基本情况是所有首选节点都为 O b d 2 首先扩大 在我的 最佳情况 示例中 我有一个
  • TravisCI:如何允许环境变量失败

    如何允许具有特定环境变量值的构建失败 例如 travis yml env TEST GROUP Smoke TEST GROUP other How to allow failures for this variable matrix al
  • 获取保存到照片库的图像的 PHAsset/localIdentifier

    我在用着UIImageWriteToSavedPhotosAlbum https www hackingwithswift com example code media uiimagewritetosavedphotosalbum how
  • YouTube 完整的 Java 正则表达式

    我需要解析几个页面才能获取他们所有的 Youtube ID 我在网上找到了很多正则表达式 但是 Java 的正则表达式并不完整 它们要么除了 ID 之外还给我垃圾 要么错过了一些 ID 我发现似乎完整的一个是托管的here https st
  • 越狱后,iOS应用程序会以root权限运行吗?

    一旦 iOS 设备越狱 我们就可以构建越狱应用程序 使用 theos 并将其安装在 Applications预加载应用程序以 root 权限运行的目录 如果应用程序是使用 Xcode 构建的 一旦安装 它就会进入 private var m
  • 在 Twitter 上上传视频的最佳方式

    我必须从我的 java 应用程序将视频上 传到 Twitter 发布带有视频的推文文本 我使用 twitter4j 上传图像 效果很好 我对上传视频的最佳方式感到困惑 我在这个链接中找到了https github com mrisney t
  • 如何按物种矩阵显示站点内植物物种生物量?

    我之前问过 如何将两列显示为二进制 存在 不存在 矩阵 这个问题得到了两个很好的答案 我现在想更进一步 在原始站点按物种列添加第三列 该列反映每个地块中每个物种的生物量 第 1 列 地块 指定约 200 个地块的代码 第 2 列 物种 指定
  • 没有重复项的可排序 Java 集合

    我正在寻找可排序 我的意思是在初始化后排序并多次使用比较器 Java 类集合 没有重复项 有没有比编写不透明的代码更纯粹的解决方案 例如防止某些 ArrayList 添加另一个具有与已存在的值相同的值的对象 编辑1 我应该添加一些关于排序的
  • 如何使用CSS更改iframe的src

    我有这段代码 并且不知道如何制作它 因此当我单击 菜单 中的项目时 不会重定向到其他页面 而是更改 iframe 的 src 我应该更改 Code
  • Firestore从集合中获取文档ID

    我正在尝试使用 id 检索我的文档 但无法弄清楚 目前我像这样检索我的文档 const racesCollection AngularFirestoreCollection
  • 有没有好的 Clojure 基准测试?

    Edit Clojure 基准测试已达到基准游戏 http benchmarksgame alioth debian org u64q clojure html 我已经制作了这个问题社区维基并邀请其他人保持更新 有人知道 Clojure 性
  • Django 2.1 测试问题

    我正在学习 Django 我已经使用 Python 进行了几年开发 并决定开始检查这个框架 我收到了奇怪的回应 我正在编写一个测试用例 它在测试之外完美运行 这就是代码 class BoardTopicsTests TestCase Hag
  • 在 UIScrollView 中滚动时未调用 TouchBegan 方法

    我注意到 如果我立即将手指放在 UIScrollView 上并滚动 则不会调用 TouchBegan 方法 只有当我在滚动之前将手指放置一段时间后才会调用 TouchBegan 每当 UIScrollView 上有触摸时 不应该总是调用 T
  • 需要帮助打印清单

    我正在用 Python 处理待办事项列表 目前我一直在打印待办事项列表 我有我的添加代码和查看代码 if sel 1 add task name input enter task name prio input enter priority
  • UnsafePointer 在 swift 3 中不再工作

    当我从 swift 2 转换为 swift 3 后 下面提到的行会弹出一个错误 let value UnsafePointer
  • 经理游戏:如何计算市值?

    通常 足球经理游戏中的球员都有市场价值 经理们根据这些市场价值出售他们的球员 他们想 哦 这个球员值3 000 000 所以我会尝试以3 500 000的价格把他卖掉 所有球员都具备三个基本素质 强度值 1 99 他们所能达到的最大力量 1
  • 比较一个类的两个实例

    我有一堂这样的课 public class TestData public string Name get set public string type get set public List
  • 如何使用匹配(正则表达式)验证用户名?

    我试图将以下表达式放入 matches 函数中 但我猜想在尝试编译规则时会出现错误 a zA Z a zA Z0 9 a zA Z0 9 a z0 9 validate规则如下 validate newData val auth uid n
  • J中如何写一个超过3个参数的函数?

    例如 函数g x y x z 怎么写 我知道如何编写带有两个参数的函数 一种方法是使用变量匹配 f 3 0 x y z y x y x z f 1 2 3 0 5 f 1 2 3 0 5 f 1 5 2 0 5 0 5 另一种方法是将变量视
  • 将 Woocommerce 购物车项目自定义数据保存为订单项目元数据,将其显示在订单和电子邮件上

    关于 Woocommerce 我有要添加到购物车的自定义数据 在functions php 文件中 我有以下函数 Display cart item custom data in cart and checkout pages add fi