ووکامرس (WooCommerce) CRUD & HPOS API پلتفرم: woocommerce پیشرفته (Hard) سطح ریسک: حساس و پرخطر (High Risk)

دریافت اطلاعات سفارش سازگار با دیتابیس HPOS ووکامرس (High-Performance Order Storage)

تست‌شده و بازبینی‌شده در 1405/06/29 ۶۳۹ بار کپی ۹۱۰ مشاهده
پاسخ سریع و خلاصه کاربردی (Quick Answer)

با متد `Automattic\\WooCommerce\\Utilities\\OrderUtil::custom_orders_table_usage_is_enabled()` سازگاری را بررسی کرده و داده‌ها را با شیء `$order->get_...()` به جای `get_post_meta` مدیریت نمایید.

مشخصات فنی و شناسنامه کد (Code Information)

بازبینی: 1405/06/29
پلتفرم اجرایی (Platform) woocommerce
نوع کد (Code Type) CRUD & HPOS API
محل قرارگیری فایل (Location) functions.php یا افزونه اختصاصی
سطح دشواری (Difficulty) پیشرفته (Hard)
سطح ریسک (Risk Level) حساس و پرخطر (High Risk)
نیاز به بکاپ اولیه؟ بله، حتماً بکاپ بگیرید
سازگاری با وردپرس وردپرس ۵.۸ به بالا
سازگاری با ووکامرس و HPOS ۱۰۰٪ سازگار و طراحی شده برای معماری جدید COT / HPOS
هشدار ایمنی: این تغییر مستقیماً فایل‌های حساس سرور یا دیتابیس را ویرایش می‌کند. حتماً پیش از ذخیره کد از وب‌سایت یا فایل مورد نظر فایل پشتیبان (Backup) تهیه کنید.
|
<?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;
}

کد را کجا قرار دهیم؟ (Placement Guide)

کد را در functions.php یا فایل اصلی افزونه اختصاصی قرار دهید. هوک declare_compatibility باید قبل از لود کامل ووکامرس اجرا شود.

مسیر فایل: functions.php یا افزونه اختصاصی

این کد چگونه کار می‌کند؟ (How it Works)

ووکامرس با استفاده از شیء انتزاعی Order Data Store تصمیم می‌گیرد که اطلاعات را از جداول اختصاصی wp_wc_orders بخواند یا جداول قدیمی پست‌ها، بدون اینکه کد نویسنده دچار شکستگی شود.

چه زمانی از این کد استفاده کنیم؟ (Use Cases)

در تمام وب‌سایت‌های جدید ووکامرسی نسخه ۸ به بالا و جهت جلوگیری از نمایش اخطار عدم سازگاری در پیشخوان ووکامرس.

چه زمانی نباید از این کد استفاده کنیم؟ (Anti-patterns)

در نسخه‌های بسیار قدیمی ووکامرس زیر ۷.۰.

پیش‌نیازهای اجرا

ووکامرس ۸.۰ به بالا، PHP 7.4 یا PHP 8.0+.

نحوه تست و اطمینان از عملکرد

به مسیر «ووکامرس > وضعیت > قابلیت‌ها» بروید؛ گزینه High-Performance order storage بدون هیچ اخطار ناسازگاری قالب به راحتی فعال می‌شود.

نحوه بازگردانی سریع (Rollback)

کد را از functions.php بردارید.

خطاهای رایج و راه‌حل رفع

استفاده از توابع منسوخ شده مانند get_post_meta($order_id, ...) یا کوئری‌های دستی با WP_Query به جای wc_get_orders().

ملاحظات و نکات امنیتی

استفاده کامل از متدهای امن کلاس‌های هسته ووکامرس.

تاثیر بر سرعت و پرفورمنس

افزایش تا ۵ برابری سرعت ثبت سفارش و صدور فاکتور در فروشگاه‌های با صدها هزار سفارش.

پرسش‌های متداول پیرامون این کد (FAQ)

چون در حالت HPOS فعال، سفارش‌ها دیگر یک پست در جدول wp_posts نیستند و در جدول اختصاصی wp_wc_orders ذخیره می‌شوند؛ بنابراین باید حتماً از $order->get_meta() استفاده شود.
منابع و مستندات رسمی بررسی‌شده (Official Sources):

سبد خرید شما

0 افزونه

سبد خرید شما خالی است

هنوز محصولی را به سبد خرید اضافه نکرده‌اید. می‌توانید از افزونه‌های اختصاصی ما دیدن فرمایید.

مشاهده فروشگاه افزونه‌ها

ثبت درخواست مشاوره

با تکمیل فرم زیر، کارشناسان فنی بیسکو وب در سریع‌ترین زمان ممکن با شما تماس می‌گیرند.

مشاور
پشتیبانی و مشاوره تخصصی
پاسخگویی سریع کارشناسان
09903336117