php - 使用 CRUD 方法设置订单创建日期并将其保存在 Woocommerce 3 中
问题描述
我正在为 Woocommerce 开发一个自定义插件,它使用其他一些 Woocommerce 扩展提供的功能。我在 Woocommerce 中遇到了一个奇怪的问题。
虽然我已经设置date_created
了一个订单,$order->set_date_created
但是在再次获得相同的订单后,wc_get_order( $order->get_id() )
返回的$order
对象没有date_created
设置,它是NULL
. 下面带有注释的代码应该清楚,我想说的是:
// returns a new order object from order post_id
$order = wc_get_order( $post->ID );
$order->set_date_created( time() );
// Getting expected WC_DateTime object
$order->get_date_created();
/***** Here's the problem ******/
$same_order = wc_get_order( $order->get_id() );
// returns NULL instead of WC_DateTime object
$same_order->get_date_created();
所以我的问题是为什么该date_created
属性在再次获得相同的订单时消失并且在设置时没有写入数据库。请帮助找到潜在的错误并建议对此进行修复。
虽然,我可以$order
在设置之后传递对象,date_created
但是来自另一个插件的函数需要order_id
一个应该有它的命令date_created
set 而不是NULL
。这就是我设置date_created
然后传递$order->get_id()
给函数的原因。
解决方案
您还需要保存数据……请尝试以下操作:
// Get an instance of the WC_Order object
$order = wc_get_order( $post->ID );
// Get an instance of the current WC_DateTime object
$date_time = new WC_DateTime();
// Set it in the order
$order->set_date_created( $date_time );
// Save the data (in database)
$order->save();
这次它应该可以工作了,你不会得到一个空值。
推荐阅读
- gcc - 将本机节点模块编译到 Android 时无法链接库。使用 -fPIC 标志时出现 -fPIC 问题重新编译
- javascript - Sourcemap 在 Sentry 中无效或不可解析
- guid - ProductCode (GUID) 用于为 AutoCAD 自动加载 DLL
- java - Tomcat 优雅关闭
- node.js - 如何在 Service 构造函数中对 Controller 进行单元测试和模拟 @InjectModel
- tomcat - Tomcat 服务器的 JVM 可用内存未返回给操作系统
- javascript - 如何打印我放入的文件的文件名在一个?
- c++ - 使用 C++ 中的 ASCII 代码将输入从小写转换为大写
- r - 如何在R中使用knn查找重要变量
- c# - 当该表中没有行时,C# sqlite 删除行不起作用