检查 WooCommerce 中是否存在特定订单元数据或订单项目元数据

问题描述 投票:0回答:1

我们正在努力更新 HPOS 的一些自定义插件。我查看了 https://developer.woocommerce.com/docs/hpos-order-querying-apis/ 寻找答案,但似乎没有。

我正在寻找代码来确定订单元数据是否存在。类似于 metadata_exists().

是否有代码可以确定密钥是否存在于wp_wc_orders_meta表中?

如何确定密钥是否存在于 wp_woocommerce_order_itemmeta 表中?

最后,使用 $order->get_meta('my_stuff') 获取数据的执行速度是否与检查返回的内容一样快?有时,值是 4 或 5 个数据的数组。我认为现在的执行速度如此之快,也许只是获取值也会同样快——内存会增加一点。这些天这不是一个令人担忧的问题吗?你的想法?

if (empty(metadata_exists('post', $order_id, 'some_order_meta_tag'))) {
    $my_metadata_exists = 0;
}
php woocommerce metadata orders highperformance
1个回答
0
投票

要检查 WooCommerce 订单元数据或订单商品元数据,您可以使用现有 WC_Data

 对象
(与 HPOS 兼容)中的以下
WC_Order 方法

  1. meta_exist( $key = '' )
    方法
    (最有效的方法),
  2. get_meta( $key = '', $single = true, $context = 'view' )
    方法
    (替代).

您可以将下面示例中的

'desired_meta_key'
替换为所需的元密钥:

  1. meta_exist()
    方法的使用示例:
## For order metadata

// check if metadata exists
if ( $order->meta_exist( 'desired_meta_key' ) ) {
   // Do something
}

## For order item metadata

// Get order items (line items)
$line_items = $order->get_items();

// Loop through order items
foreach ( $line_items as $item ) {
    // check if metadata exists
    if ( $order->meta_exist( 'desired_meta_key' ) ) {
       // Do something
    }
}
  1. get_meta()
    方法的使用示例:
## For order metadata

// Get specific metadata if it exists and is not empty
if ( $metadata = $order->get_meta( 'desired_meta_key' ) ) {
   // Do something with this existiong $metadata
}

## For order item metadata

// Get order items (line items)
$line_items = $order->get_items();

// Loop through order items
foreach ( $line_items as $item ) {
    // Get specific metadata if it exists and is not empty
    if ( $metadata = $order->get_meta( 'desired_meta_key' ) ) {
       // Do something with this existiong $metadata
    }
}

无论有或没有 HPOS 均可工作...


补充:

要确保

$order
变量存在并且是
WC_Order
对象,您可以使用:

if ( ! is_a( $order, 'WC_Order' ) ) {
   // Get the WC_Order object from an existing order ID
    $order = wc_get_order( $order_id );
}

要检查 HPOS 是否已启用,您可以使用以下自定义条件函数:

## Conditional function: Check if HPOS is enabled

use Automattic\WooCommerce\Utilities\OrderUtil;

function is_hpos() {
    return OrderUtil::custom_orders_table_usage_is_enabled();
}

就像这个例子:

if ( is_hpos() ) {
   // HPOS is enabled
} else {
   // HPOS is disabled
}
© www.soinside.com 2019 - 2024. All rights reserved.