دریافت اطلاعات سفارش سازگار با دیتابیس HPOS ووکامرس (High-Performance Order Storage)
با متد `Automattic\\WooCommerce\\Utilities\\OrderUtil::custom_orders_table_usage_is_enabled()` سازگاری را بررسی کرده و دادهها را با شیء `$order->get_...()` به جای `get_post_meta` مدیریت نمایید.
<?php
use Automattic\WooCommerce\Utilities\OrderUtil;
/**
* اعلام رسمی سازگاری قالب/پلاگین با معماری HPOS ووکامرس
*/
add_action( 'before_woocommerce_init', function() {
if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
}
} );
/**
* دریافت و پردازش اطلاعات سفارش با متدهای CRUD کاملاً سازگار با HPOS
*/
function bisco_process_hpos_compatible_order( $order_id ) {
// واکشی امن شیء سفارش بدون در نظر گرفتن محل فیزیکی ذخیره در دیتابیس
$order = wc_get_order( $order_id );
if ( ! $order ) {
return;
}
// بررسی اینکه آیا سیستم در حالت HPOS اختصاصی کار میکند
$is_hpos_active = OrderUtil::custom_orders_table_usage_is_enabled();
// روش استاندارد خواندن اطلاعات اصلی سفارش
$customer_id = $order->get_customer_id();
$order_total = $order->get_total();
$billing_email = $order->get_billing_email();
$billing_phone = $order->get_billing_phone();
$payment_method = $order->get_payment_method_title();
// روش استاندارد ذخیره و خواندن متای اختصاصی (بدون get_post_meta)
$tracking_code = $order->get_meta( '_bisco_post_tracking_code', true );
// بهروزرسانی متای سفارش با متد CRUD
$order->update_meta_data( '_bisco_processed_at', current_time( 'mysql' ) );
$order->save(); // ذخیره خودکار در جدول صحیح (چه wp_posts باشد چه wp_wc_orders)
}
/**
* واکشی سفارشهای در حال پردازش با wc_get_orders به جای WP_Query سنتی
*/
function bisco_get_recent_processing_orders() {
$args = array(
'status' => array( 'wc-processing' ),
'limit' => 10,
'orderby' => 'date',
'order' => 'DESC',
'return' => 'ids',
);
// این تابع به صورت هوشمند از جداول سریع HPOS کوئری میزند
$order_ids = wc_get_orders( $args );
return $order_ids;
}