在我的WooCommerce商店中,我有一个输入字段,我希望用户在其中输入订单号。验证此字段时,我需要检查WooCommerce中是否确实存在该订单 number 。
从this question中看来,WooCommerce order_number 可能并不总是与 order_id 相同(它总是与 post_id )。
所以我不能使用 wc_get_order($ the_order)函数,因为the documentation声明要在 $ the_order 中使用 post_id em>参数。
我找不到通过订单号获取订单的特定功能(文档和github中的代码均未提供)。
我是WooCommerce的新手,所以也许我错过了一些东西。有没有办法做到这一点?还是 wc_get_order 记录错误?
我在堆栈溢出时做了很多谷歌搜索和搜索,但是我真的找不到答案!任何帮助表示赞赏。
PS:我想我可以得到所有订单并逐一检查它们是否匹配,但我希望能找到一个更简单的解决方法:D
答案 0 :(得分:4)
您之所以在文档中找不到任何相关信息,是因为WooCommerce没有订单号的本地概念。 ID是订单号。
但是,商店所有者往往会发现订单ID不会按顺序增加。由于WordPress处理帖子的方式,ID在一个订单和下一个订单之间可能会有很大的跳跃。用户通常会安装一个插件来解决这个问题。正是这些插件介绍了订单ID和它们称为订单号的区别。
这是一个这样的插件的示例:https://en-gb.wordpress.org/plugins/woocommerce-sequential-order-numbers/
文档中包含一个示例,该示例说明如何通过订单号查找订单。如果您安装了这些插件之一,则只需查找相关插件如何将数字解析为ID。
答案 1 :(得分:0)
您可以尝试以下if语句,以查看给定的ID(数字)是否为订单号:
function is_it_a_shop_order($givenNumber)
{
if(get_post_type($givenNumber) == "shop_order")
{
echo "yes this is a valid order number";
}
else
{
echo "no go away";
}
}
Wordpress将所有帖子(页面,订单,产品等)存储在wp_posts表中,订单以名为“ shop_order”的帖子类型存储。
我测试了代码。我希望这能帮到您。祝你有美好的一天。
答案 2 :(得分:0)
通过 wc_get_order 调用发送订单号。如果返回的数组为空,则订单号不存在。
$bOrderExists = DoesOrderExist($OrderNumber);
function DoesOrderExist($OrderNumber)
{
$orderq = wc_get_order($OrderNumber);
if(empty($orderq))
return 0;
return 1;
}