ووکامرس (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

فعال‌سازی اعلان‌های وب‌اپلیکیشن

از آخرین تخفیف‌های شگفت‌انگیز، وضعیت سفارشات و به‌روزرسانی‌های اختصاصی روی گوشی خود باخبر شوید.