我们正在努力更新 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;
}
要检查 WooCommerce 订单元数据或订单商品元数据,您可以使用现有 WC_Data
对象(与 HPOS 兼容)中的以下
WC_Order
方法:
您可以将下面示例中的
'desired_meta_key'
替换为所需的元密钥:
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
}
}
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
}