以编程方式创建 WooCommerce 订单时设置外部订单 ID

2024-04-08

我一直在使用一些记录良好的代码以编程方式创建 Woocommerce 订单。工作得很好。参考这里:https://quadlayers.com/add-products-woocommerce/ https://quadlayers.com/add-products-woocommerce/

不过,我很想知道在通过脚本创建我的 WC 订单时是否可以定义 order_id(或者是 post_id?)。我在我的商店上运行此代码,该商店目前从在线市场将订单导入 Woocommerce,其中订单已经有订单号,我很想通过此 hack 删除交叉引用,并将现有订单号传递给厕所。

这是我所拥有的的一个粗略想法;

$insert_marketplace_order_id = 1234567890;

$order = wc_create_order();
$order->set_order_id($insert_marketplace_order_id);
$order->set_date_created($date_here);
$order-> etc. etc.
$order->save();

我显然已经四处搜寻过,不幸的是存在一个插件 -这似乎是谷歌所知道的全部- 没有帮助。

我本来会想'设置订单id' 可以解决这个问题,但也许我放置它的位置有问题。还有其他想法吗?


在 WooCommerce 中,订单 ID 是帖子 ID,因此您无法像您尝试那样插入外部引用 ID。 WooCommerce 订单是自定义帖子类型,订单 ID(帖子 ID)是根据上次使用的帖子 ID 生成的wp_posts数据库表...

现在你可以设置订单号 using 过滤钩woocommerce_order_number https://github.com/woocommerce/woocommerce/tree/4.7.0/includes/class-wc-order.php#L480, 设置您自己的订单参考号作为订单号,这不是 WooCommerce 订单 ID(帖子 ID).

所以你的代码将是:

$insert_marketplace_order_id = 1234567890;

$order = new WC_Order();
$order->set_date_created($date_here);

// $order-> etc. etc.

$order->update_meta_data('_order_number', $insert_marketplace_order_id); // <== Here
$order->save();

然后,您将添加以下挂钩函数,以便能够获取并显示正确的订单号:

add_filter( 'woocommerce_order_number', 'wc_set_order_number', 10, 2 );
function wc_set_order_number( $order_id, $order ) {

    // Get the order number (custom meta data)
    $order_number = $order->get_meta('_order_number'); 

    return empty($order_number) ? $order_id : $order_number;
}

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

现在当使用WC_Order method get_order_number()WooCommerce 将获取/显示正确的订单号。

Note:因为你不使用任何参数wc_create_order()功能 https://github.com/woocommerce/woocommerce/blob/4.7.0/includes/wc-core-functions.php#L76-L139更好用$order = new WC_Order();相反,这给出了一个空的WC_Order不使用实例对象save()方法2次(轻了很多).

Related: 基于付款方式的动态自定义订单号 https://stackoverflow.com/questions/63545576/dynamic-custom-order-numbers-based-on-payment-method/63910184#63910184

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

以编程方式创建 WooCommerce 订单时设置外部订单 ID 的相关文章

  • PHP 换行符 (\n) 不起作用

    由于某种原因我无法使用 n使用 PHP 输出到文件时创建换行符 上面只写着 n 到文件 我尝试使用 n 同样 它只写 n 如预期 但我一生都无法弄清楚为什么在字符串中添加 n 不会创建新行 我也尝试过 r n但它只是附加 r n 到文件中的
  • PHP 中 file、file_get_contents 和 fopen 之间的区别

    我是 PHP 新手 我不太确定 两者之间有什么区别file file get contents and fopen 函数 什么时候应该使用其中一个而不是另一个 前两个 file http www php net manual en func
  • TCPDF / FPDI 可以接受 PDF 作为字符串吗?

    是否可以将 TCPDF 或 FPDI PDF 作为字符串提供 我有一个传入的 PDF 数组作为字符串 但无法写入磁盘 我在文档中找不到与此相关的任何内容 如果没有 是否有一种有效的方法来从内存或作为对象存储 读取这些 PDF 将它们喂给 F
  • 如何在 PHP 中将默认日期设置为波斯日期?

    如何在 PHP 中将默认日期设置为波斯日期 说吧 如果我echo这个功能date Y m d 然后它会显示2018 03 05但我想要1396 12 14波斯日期 请检查 http php net manual en intldatefor
  • 打印一个模式以显示最多 5 行 5 列的数字,例如 5 4 3 2 1 和下一行 4 3 2 1 5 直到第 5 行

    这是一个正方形图案 每行有 5 列 共有 5 行 图案如下所示 5 4 3 2 1 4 3 2 1 5 3 2 1 5 4 2 1 5 4 3 1 5 4 3 2 我的代码如下以获得模式 但当计数器达到 1 并显示在相应的列值中时 我无法重
  • 如何使用 RewriteRule 来为 PHP 修改 $_SERVER['REQUEST_URI'] ?

    有了这个 htaccess RewriteEngine On RewriteRule foo foo 1 here I tried L PT C etc RewriteRule index php L 我已经尝试了第一个 RewriteRu
  • PHP:如何发送电子邮件基础知识

    我想使用 PHP 从本地主机向其他人发送电子邮件 我需要做什么才能做到这一点 例如我需要安装邮件服务器吗 如果我没记错的话 有一种语言不需要邮件服务器来发送电子邮件 这样对吗 PHP ini里面有 邮件功能 如何配置这个 我在网上查了一下
  • PHP 从日志事件中获取行号

    好的 我还有一个问题HERE https stackoverflow com questions 3213423 php how could i make this class better suggestions feedback wel
  • 正确的标头 php mysql blob 显示图像

    我正在尝试在我的 PHP 页面中显示来自 mysql blob 的图像 我知道这不是最佳实践 然后我会将其引入我的 iOS 应用程序中 我在设置页面标题时遇到问题 我认为需要将其设置为图像 所以 这显示了图像 但我不相信页眉是正确的 hea
  • Opencart 的 $this->config->get('module_var_name')

    我正在尝试自定义 Opencart 支付模块 我看到很多地方都使用了配置信息 但我找不到任何创建正在使用的变量的内容 我知道在管理页面中 如果我选择 paypal 标准 我可以设置所有 配置 信息 但我找不到强调它的 模型 是否有模型 我希
  • PHP别名@函数

    我是 PHP 新手 看到一些使用 前缀调用函数 如 mysql ping 的示例 我感到很困惑 它是做什么用的 谷歌搜索 搜索没有太大帮助 因为 被丢弃并且 别名 不是足够好的关键字 抑制错误 警告和通知 如果你用自定义的方式补充它 你可以
  • 如何使 WordPress 主题全宽?

    我尽了最大努力 但无法通过编辑 CSS 使以下主题全宽 屏幕 如果您能向我展示或给我有关此定制的提示 我将不胜感激 http demo mythemeshop com sociallyviral http demo mythemeshop
  • 我应该使用排队系统来处理付款吗?

    我在用着Slim https www slimframework com和这个结合Stripe 的 PHP 库 https stripe com docs api php在我的应用程序中处理付款 一切都很好 但是直到最近 我在我的系统中发现
  • PHP:如何检查总数。 URL 中的参数?

    我正在使用 REQUEST 检索参数 有没有办法找到总数 URL 中的参数 而不是检索每个参数然后进行计数 这将为您提供总数 分隔的 URL 查询参数 count explode SERVER QUERY STRING 如果您只想要唯一的参
  • 在 Angular 材质表上调用 renderRows()

    我试图在更新表中使用的数据后刷新我的 Angular 表 文档说 您可以通过调用其 renderRows 方法来触发对表的渲染行的更新 但它不像普通的子组件 我可以使用 ViewChild MatSort sort MatSort 因为我不
  • 您可以使用 MySQL 查询来完整创建数据库的副本吗

    我有一个包含 5 个表的 MySQL 数据库的实时版本和一个测试版本 我不断使用 phpMyAdmin 将实时版本中的每个表复制到测试版本 有谁有mysql查询语句来制作数据库的完整副本吗 查询字符串需要考虑结构 数据 自动增量值以及与需要
  • 表单提交后显示 $_FILES['image']

    提交表单后如何显示上传的图片 提交表单后 它将是一个预览页面 因此我不会在 MySQLet 中存储图像类型 BLOB 如何显示 FILES image
  • 如何在 PHP >= 5.3 严格模式下向对象添加属性而不产生错误

    这必须很简单 但我似乎找不到答案 我有一个通用的 stdClass 对象 foo没有属性 我想添加一个新属性 bar尚未定义 如果我这样做 foo new StdClass foo gt bar 1234 严格模式下的 PHP 会抱怨 将属
  • MySQL 正在将我的时间戳值转换为 0000-00-00

    我是 PHP 新手 目前仍在学习中 我认为我的注册表有问题 username password email全部成功插入MySQL registered and last seen不要 我以为我正在使用getTimestamp 错了 但它呼应
  • 如何更改phpmyadmin MySQL的IP地址?

    我在 xampp 中更改了 apache 的 IP 地址 但无法连接到 MySQL 我认为问题是我的 apache 不在我的数据库的同一网络上 我的 apache 位于 192 168 1 10 而我的 MySQL 位于 127 0 0 1

随机推荐

  • 有条件的 Spring 配置

    是否可以在 Spring 配置中使用条件表达式 例如 我想定义两个不同的连接器 如下所示 连接器 1
  • Maven:子模块无法继承父模块的依赖项

    这是我的父母 pom
  • EditText 视图返回 null

    我有两个活动 一个 主页 片段活动和一个普通的 选项 活动 在我的主页片段活动中 我尝试使用从选项活动检索的数据来更新 EditText 视图 不幸的是 由于某种原因 片段活动无法检测到我的视图以进行更新 我不太清楚为什么 这是我的功能 u
  • Android:可以获得自定义 R.id

    是否可以让 android 给我一个自定义 id 例如 如果我已经在 xml 中定义 R id some layout R drawable some drawable 有没有这样的功能 R custom id a custom id 这样
  • 如何使用 CSS 和 Javascript 缩小 HTML?

    我有一个 html 文档 其中包含 CSS 和 Javascript 无外部文件 有没有一些在线工具可以minify文档和Javascript 的占用空间非常小 我看到许多脚本有点不可读 其中所有变量和函数名称都被替换为单字母名称等 请指教
  • Java 错误:找到接口...但需要类

    我的代码中出现了一个奇怪的运行时错误 Found interface SomeInterface but class was expected 怎么会发生这种事呢 接口如何实例化 Update 回应一些答案 我正在针对同一组库进行编译和运行
  • Int 不符合协议“StringLiteralConvertible”

    我试图在天气应用程序中解析 json 但遇到了一个我无法克服的障碍 我确实在以下代码中收到错误 类型 int 不符合协议 StringLiteralConvertible 我尝试过转换 jsonResult main 但这确实给出了错误 后
  • 重命名列表框中的项目

    我想重命名列表框中选定的项目 我怎样才能做到这一点 谢谢 编辑 几年后重新审视这个问题 以下是根据您使用的 UI 框架执行此操作的方法 这假设您想要更改所选文本 ASP Net Web 表单 protected void ChangeLis
  • 忽略绝对定位视图上的触摸以允许在底层 ScrollView 上滚动

    我有一个绝对位于 ScrollView 上方的视图 即使我在顶视图内开始触摸 我也希望能够滚动 我尝试过设置onStartShouldSetResponder and onMoveShouldSetResponder在查看到false但它仍
  • 如何监控 TCP 连接的 cwnd 和 ssthresh 值? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望在通过套接字连接发送或接收数据包时确定这些值 有没有现有的工具可以做到这一点 The ss http linux die net m
  • 重新渲染图像视图之间出现白色闪光

    不确定这是否是一个大问题 但我不完全确定是否存在解决方案 创建幻灯片样式元素时 点击后图像会更改为另一个图像 已使用 React Native 的图像预取器预取 当屏幕重新渲染时会出现白色闪烁 我认为 这个问题有具体的解决办法吗 我不明白像
  • 检查Android上是否已经创建数据库

    Android 中如何知道数据库是否已创建 有人有例子吗 you will find the data in DDMS gt 数据 数据 your package name database your database name 看第二张图
  • 如何以编程方式添加容器视图

    容器视图可以通过界面编辑器轻松添加到故事板中 添加后 容器视图具有占位符视图 嵌入转场和 子 视图控制器 但是 我无法找到以编程方式添加容器视图的方法 事实上 我什至找不到一个名为UIContainerView or so Containe
  • 如何在 Spring Boot 中全局配置`@DateTimeFormat`模式?

    在我的 Spring Boot 应用程序中 我有一些控制器接受日期作为查询参数 RestController public class MyController GetMapping public ResponseEntity
  • 具有 302 重定向的 Cookie 域

    假设我有两台服务器 a http server a com b http server b com Server a有以下端点 1 方法 GET path 2 方法 GET path do something 当发出 http get 请求
  • Google 地图 V3 用户添加标记

    我需要一些代码 允许用户将自己的标记添加到我的地图中 有人有例子吗 Thanks var initialLocation var siberia new google maps LatLng 60 105 var newyork new g
  • 为什么 Symfony Monolog 发送错误额外邮件

    我有一个 Symfony 5 中的应用程序和一个带有 Monolog 的错误报告系统 出现的问题是 当他们向我发送一封有错误的电子邮件时 我还会收到另一封包含以下内容的电子邮件 DEBUG Message Email transport S
  • locationManager:didFailWithError: 如果用户定位服务关闭,则不会调用

    从文档中位置管理器 didFailWithError http developer apple com library ios documentation CoreLocation Reference CLLocationManagerDe
  • 尝试在 docker 容器内 pip install shapely 时出现 OSError

    无法找到库 geos c 或加载其任何变体 libgeos c so 1 libgeos c so 使用 python 3 5 1 图像我尝试运行一个容器 其中包括它安装在requirements txt中的其他内容 当 docker 容器
  • 以编程方式创建 WooCommerce 订单时设置外部订单 ID

    我一直在使用一些记录良好的代码以编程方式创建 Woocommerce 订单 工作得很好 参考这里 https quadlayers com add products woocommerce https quadlayers com add