
چکیده مطلب
راهنمای تشخیص و رفع خطاهای رفع ناسازگاری HPOS در ووکامرس، از بررسی افزونههای ناسازگار و کدهای سفارشی تا استفاده صحیح از API سفارشها، همگامسازی اطلاعات و بازگشت ایمن در صورت بروز مشکل.
فهرست مطالب
رفع ناسازگاری HPOS در ووکامرس؛ راهنمای عیبیابی و مهاجرت امن
اگر هنگام فعالسازی HPOS در ووکامرس با هشدار ناسازگاری افزونه مواجه شدهاید، گزینه فعالسازی غیرفعال است یا پس از مهاجرت بعضی اطلاعات سفارشها بهدرستی نمایش داده نمیشوند، پیش از تغییر تنظیمات باید علت را مشخص کنید. این مشکلات ممکن است به ناسازگاری واقعی یک افزونه، استفاده از APIهای قدیمی وردپرس برای خواندن سفارشها یا تکمیلنشدن همگامسازی دادهها مربوط باشند.
پیشنهادات





در این راهنما یاد میگیرید چگونه بدون دستکاری مستقیم جداول سفارش و بدون به خطر انداختن اطلاعات مشتریان، وضعیت HPOS را بررسی کنید، کدهای سفارشی را ارزیابی کنید و برای فعالسازی یا بازگشت به ساختار قبلی تصمیم بگیرید.
HPOS چیست و چرا رفع ناسازگاری HPOS در ووکامرس اهمیت دارد؟
HPOS مخفف High-Performance Order Storage و به معنای ذخیرهسازی سفارش با کارایی بالاست. این قابلیت ووکامرس اطلاعات سفارشها را در جداول اختصاصی نگهداری میکند، بهجای آنکه مانند ساختار قدیمی، ذخیرهسازی اصلی سفارشها به جداول عمومی نوشتهها و متادیتای وردپرس متکی باشد.
در ساختار قدیمی، اطلاعات سفارش معمولاً با نوع نوشته سفارشی shop_order و جداولی مانند wp_posts و wp_postmeta مرتبط بود. HPOS از جداول اختصاصی برای اطلاعات سفارش، نشانیها، دادههای عملیاتی و متادیتای سفارش استفاده میکند.
این تغییر معماری برای مدیریت دادههای سفارش طراحی شده است، اما ممکن است روی افزونهها یا کدهایی اثر بگذارد که مستقیماً از APIهای نوشته وردپرس برای دسترسی به سفارشها استفاده میکنند.
برای آشنایی با ساختار و الزامات این قابلیت، به مستندات رسمی HPOS در ووکامرس مراجعه کنید.
اقدامات اولیه پیش از عیبیابی
پیش از فعالسازی، غیرفعالسازی یا تغییر روش ذخیرهسازی سفارشها، وضعیت اولیه فروشگاه را ثبت کنید. سفارشهای پرداختشده، بازپرداختها و اطلاعات مشتریان نباید در جریان عیبیابی در معرض خطر قرار بگیرند.
- از فایلها و پایگاه داده نسخه پشتیبان تهیه کنید. نسخه پشتیبان باید قابل بازیابی باشد؛ صرف موفقیت عملیات ایجاد فایل پشتیبان کافی نیست.
- یک محیط آزمایشی (Staging) ایجاد کنید. نسخه آزمایشی باید تا حد امکان از نظر نسخههای وردپرس، ووکامرس، قالب، افزونهها و تنظیمات با سایت اصلی مطابقت داشته باشد.
- نسخههای نرمافزارها را ثبت کنید. نسخه ووکامرس، افزونههای فعال، قالب و کدهای سفارشی مرتبط با سفارشها را یادداشت کنید.
- وضعیت فعلی ذخیرهسازی را بررسی کنید. مشخص کنید سفارشهای فروشگاه در ساختار قدیمی ذخیره میشوند یا HPOS فعال است و آیا حالت سازگاری نیز روشن است.
- فرآیندهای حساس را مشخص کنید. درگاه پرداخت، صدور فاکتور، ارسال پیامک، مدیریت موجودی، بازپرداخت، اشتراکها و وبهوکها را در فهرست آزمون قرار دهید؛ البته فقط مواردی که واقعاً در فروشگاه استفاده میشوند.
اگر با فرایند بهروزرسانی سایت آشنایی ندارید، میتوانید راهنمای بهروزرسانی وردپرس و بررسی سازگاری را نیز مطالعه کنید.
پیشنهادات





چگونه علت هشدار ناسازگاری HPOS را پیدا کنیم؟
اولین نکته این است که هشدار ناسازگاری الزاماً ثابت نمیکند افزونه در تمام شرایط اجرایی شکست میخورد؛ با این حال، نباید آن را نادیده گرفت. وضعیت اعلامشده افزونه باید با بررسی کد، مستندات سازنده و آزمون عملی در محیط آزمایشی تطبیق داده شود.
مرحله اول: فهرست افزونههای ناسازگار را بررسی کنید
در پیشخوان وردپرس به مسیر زیر بروید:
ووکامرس ← پیکربندی ← پیشرفته ← امکانات
در این صفحه وضعیت HPOS و در دسترس بودن گزینههای مرتبط را بررسی کنید. در صورت نمایش فهرست افزونههای ناسازگار، نام افزونهها را یادداشت کنید.
همچنین بخش افزونههای وردپرس را بررسی کنید تا هشدارهای مربوط به سازگاری با HPOS را مشاهده کنید. نام افزونه، نسخه نصبشده و وضعیت پشتیبانی اعلامشده از سوی توسعهدهنده را ثبت کنید.
مرحله دوم: سازگاری را از مستندات سازنده بررسی کنید
ابتدا افزونه را به نسخهای که توسعهدهنده برای محیط فعلی شما پشتیبانی میکند بهروزرسانی کنید؛ اما این کار را نخست در محیط آزمایشی انجام دهید. سپس مستندات رسمی افزونه یا پاسخ پشتیبانی آن را برای پشتیبانی از HPOS بررسی کنید.
اگر افزونه از HPOS پشتیبانی نمیکند، گزینه امنتر استفاده از نسخه سازگار، دریافت اصلاحیه از توسعهدهنده یا جایگزینکردن افزونه است. اعلام پشتیبانی HPOS در توضیحات یک محصول یا افزودن یک قطعه کد بهتنهایی تضمین نمیکند که تمام قابلیتهای آن در این حالت صحیح عمل کنند.
مرحله سوم: آزمون کنترلشده انجام دهید
در محیط آزمایشی، افزونههای مرتبط با سفارش را یکییکی بررسی کنید. اگر برای تشخیص تداخل نیاز به غیرفعالکردن افزونه دارید، این کار را فقط در محیط آزمایشی انجام دهید و نتیجه را ثبت کنید.
پس از هر تغییر، عملیات مرتبط با افزونه را دوباره آزمایش کنید. برای مثال، اگر افزونه اطلاعات سفارش را به سیستم حسابداری ارسال میکند، تنها بازشدن صفحه سفارش کافی نیست؛ باید انتقال داده و نتیجه نهایی نیز بررسی شود.
| نشانه | موضوع قابل بررسی | اقدام پیشنهادی |
|---|---|---|
| گزینه فعالسازی HPOS غیرفعال است | وضعیت اعلامشده افزونههای فعال | فهرست ناسازگارها و نسخه افزونهها را بررسی کنید. |
| اطلاعات سفارش در افزونه سفارشی نمایش داده نمیشود | استفاده مستقیم از APIهای نوشته یا متادیتای وردپرس | کد را برای استفاده از API سفارش ووکامرس بررسی کنید. |
| سفارشها ناقص یا قدیمی به نظر میرسند | وضعیت همگامسازی و جدول مرجع دادهها | وضعیت همگامسازی را بررسی کنید؛ جداول را دستی تغییر ندهید. |
| امکانات سفارشی در صفحه مدیریت سفارشها ناپدید شدهاند | وابستگی به صفحه و Hookهای قدیمی مدیریت سفارش | سازگاری کد با صفحه مدیریت سفارش مبتنی بر HPOS را بررسی کنید. |
بررسی و اصلاح کدهای سفارشی برای HPOS
اگر هشدار به افزونهای اختصاصی یا قطعه کد سفارشی مربوط است، بررسی کد اهمیت ویژهای دارد. یکی از مشکلات رایج معماری این است که کد برای خواندن سفارش از توابع عمومی نوشتههای وردپرس استفاده میکند.
برای نمونه، استفاده از get_post_meta() یا update_post_meta() برای مدیریت متادیتای سفارش ممکن است در ساختار HPOS نتیجه مورد انتظار را نداشته باشد. ووکامرس APIهای مخصوصی برای کار با سفارشها ارائه کرده است که باید به آنها اولویت داده شود.
خواندن سفارش از طریق API ووکامرس
بهجای وابستگی مستقیم به شیء نوشته وردپرس، میتوان از wc_get_order() استفاده کرد:
<?php
$order_id = absint( $order_id );
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
if ( ! $order ) {
return;
}
$tracking_code = $order->get_meta( '_tracking_code', true );
این قطعه کد نمونهای برای دریافت سفارش و خواندن یک مقدار متادیتاست. فرض بر این است که متغیر $order_id در زمینهای معتبر در دسترس است. اگر شناسه سفارش از درخواست کاربر دریافت میشود، اعتبارسنجی ورودی و کنترل مجوز دسترسی به آن سفارش نیز لازم است. این کد بهتنهایی یک Endpoint یا عملیات مدیریتی امن ایجاد نمیکند.
بهروزرسانی متادیتای سفارش
برای افزودن یا بهروزرسانی متادیتا، از متدهای شیء سفارش استفاده کنید و پس از انجام تغییرات لازم، آن را ذخیره کنید:
$order = wc_get_order( $order_id );
if ( ! $order ) {
return;
}
// مقدار ورودی باید قبلاً اعتبارسنجی و متناسب با نوع داده پاکسازی شده باشد.
$order->update_meta_data( '_tracking_code', $validated_tracking_code );
$order->save();
متغیر $validated_tracking_code در این مثال باید از منبع معتبر و پس از اعمال قواعد اعتبارسنجی مناسب تهیه شده باشد. در یک قابلیت مدیریتی، همچنین باید مجوز کاربر و مالکیت یا دسترسی او به سفارش بررسی شود.
برای جستوجوی سفارشها نیز wc_get_orders() و برای ساخت سفارش در صورت نیاز wc_create_order() را در نظر بگیرید. از جایگزینکردن API ووکامرس با Queryهای مستقیم به جداول داخلی سفارشها پرهیز کنید، مگر اینکه دلیل فنی مشخص و پیادهسازی کاملاً بررسیشدهای وجود داشته باشد.
بررسی Hookها و صفحه مدیریت سفارش
تغییرات HPOS فقط به ذخیرهسازی محدود نیست. افزونهای که ستون سفارشی، متاباکس یا عملیات مدیریتی سفارش ایجاد میکند ممکن است به رفتار صفحه قدیمی سفارش وابسته باشد.
در این حالت، استفاده قبلی از Hookهایی نظیر manage_shop_order_posts_columns یا manage_shop_order_posts_custom_column را بررسی کنید. صرف حضور این Hookها در کد، دلیل قطعی ناسازگاری نیست؛ باید مشخص شود آیا واقعاً برای صفحه مدیریت سفارش استفاده شدهاند و چه معادل یا مسیر پشتیبانیشدهای برای ساختار جدید لازم است.
برای مطالعه بیشتر درباره منطق Hookها در توسعه وردپرس، راهنمای هوکهای وردپرس را ببینید.
راهنمای رسمی توسعهدهندگان ووکامرس، روشهای سازگارکردن افزونهها با HPOS را با نمونههای کدنویسی توضیح میدهد. برای اصلاح افزونههای اختصاصی، این مرجع از حدسزدن نام API یا Hook جایگزین مطمئنتر است.
اعلام سازگاری افزونه با HPOS
توسعهدهنده میتواند پس از بررسی و آزمون واقعی افزونه، سازگاری آن را به ووکامرس اعلام کند. نمونه زیر بر اساس مستندات توسعهدهندگان ووکامرس است و باید در فایل اصلی افزونه قرار گیرد:
add_action( 'before_woocommerce_init', function () {
if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
'custom_order_tables',
__FILE__,
true
);
}
} );
این اعلان فقط وضعیت سازگاری اعلامشده افزونه را مشخص میکند؛ کد ناسازگار را اصلاح نمیکند، دادهها را مهاجرت نمیدهد و جایگزین آزمون نیست. آن را تنها زمانی به کار ببرید که بررسی کد و آزمونهای لازم موفق بوده باشند. اگر افزونه واقعاً ناسازگار است، نباید صرفاً برای حذف هشدار، سازگاری آن را اعلام کنید.
اگر قصد سفارش یا توسعه یک راهکار اختصاصی را دارید، راهنمای توسعه افزونه اختصاصی وردپرس میتواند برای شناخت ملاحظات طراحی مفید باشد.
مهاجرت و همگامسازی سفارشها
در فروشگاههایی که از ساختار قدیمی استفاده میکنند، مهاجرت به HPOS باید مطابق دستورالعمل نسخه نصبشده ووکامرس انجام شود. روشنکردن یک گزینه بدون توجه به وضعیت همگامسازی، نسخه افزونهها و مسیرهای سفارشی سفارش، روش مناسبی برای عیبیابی نیست.
- در محیط آزمایشی، وضعیت HPOS و حالت سازگاری را در بخش امکانات ووکامرس بررسی کنید.
- افزونههایی را که از انواع نوشته سفارشی وابسته به سفارش استفاده میکنند، مطابق مستندات سازنده بررسی کنید. پیش از مهاجرت، آنها را بدون دلیل غیرفعال نکنید.
- در صورت نیاز به همگامسازی، اجازه دهید وظایف پسزمینه ووکامرس اجرا شوند و وضعیت عملیات را در بخش اقدامات زمانبندیشده بررسی کنید.
- پیش از تغییر جدول مرجع سفارشها، تکمیل همگامسازی را تأیید کنید. تعداد سفارشها، وضعیت آنها و اطلاعات مهم باید در آزمون کنترلشده قابل بررسی باشند.
- پس از فعالسازی، سناریوهای واقعی فروشگاه از جمله ثبت سفارش، پرداخت، لغو، بازپرداخت و اتصالهای جانبی فعال را در محیط آزمایشی تست کنید.
برای جزئیات نسخهمحور، دستورالعمل رسمی فعالسازی، همگامسازی و مهاجرت HPOS را دنبال کنید. نام گزینهها و رفتار دقیق همگامسازی ممکن است با نسخه نرمافزار تغییر کند؛ بنابراین به مسیرها و دستورهای قدیمی یا حدسی اتکا نکنید.
اگر پس از فعالسازی HPOS مشکلی رخ داد چه کنیم؟
اگر بعد از مهاجرت، سفارشها بهدرستی خوانده نمیشوند، فرآیند پرداخت مختل شده یا دادهها در یک افزونه جانبی متفاوت نمایش داده میشوند، ابتدا تغییرات اخیر و محل وقوع مشکل را مشخص کنید.
- در صورت تأثیر روی خرید واقعی، طبق برنامه عملیاتی فروشگاه از ادامه تغییرات پرخطر جلوگیری کنید و موضوع را فوراً بررسی کنید.
- لاگهای ووکامرس و PHP، نسخه افزونههای مرتبط و زمان وقوع مشکل را ثبت کنید؛ اطلاعات حساس مشتریان را در گزارش عمومی منتشر نکنید.
- در محیط آزمایشی، مشخص کنید مشکل مربوط به کد افزونه، همگامسازی یا تنظیمات ذخیرهسازی است.
- اگر بازگشت به ساختار قبلی لازم است، از مسیر رسمی ووکامرس و پس از بررسی وضعیت همگامسازی اقدام کنید. در صورت وجود سفارشهای همگامنشده، تغییر مرجع ذخیرهسازی ممکن است مسدود باشد یا خطر ناسازگاری داده ایجاد کند.
- پس از بازگشت، سفارشهای نمونه و فرآیندهای حساس را دوباره بررسی کنید و علت اصلی را قبل از تلاش مجدد برطرف کنید.
بازگرداندن تنظیم ذخیرهسازی جایگزین بازیابی نسخه پشتیبان نیست و تضمین نمیکند هر مشکلی بهصورت خودکار برطرف شود. هرگز برای حل فوری مشکل، جداول HPOS را مستقیماً تغییر ندهید یا دادههای سفارش را بهصورت دستی حذف نکنید.
اشتباهات رایج هنگام رفع خطای HPOS
- اعلام سازگاری بدون آزمون: این کار ممکن است هشدار را تغییر دهد، اما ناسازگاری واقعی کد را حل نمیکند.
- ویرایش مستقیم جداول پایگاه داده: چنین تغییری میتواند همگامسازی یا صحت اطلاعات سفارش را مختل کند.
- غیرفعالکردن افزونهها در سایت زنده برای یافتن علت: این کار ممکن است پرداخت، صدور فاکتور یا پردازش سفارشها را مختل کند؛ آزمون را در محیط آزمایشی انجام دهید.
- نادیدهگرفتن وظایف همگامسازی: پیش از نتیجهگیری درباره فقدان اطلاعات، وضعیت همگامسازی را بررسی کنید.
- آزمون فقط صفحه مدیریت: مشاهده سفارش بهتنهایی صحت پرداخت، وبهوک، بازپرداخت، موجودی یا اتصالهای جانبی را اثبات نمیکند.
- فرضکردن بهبود سرعت قطعی: HPOS برای بهبود ساختار ذخیرهسازی سفارش طراحی شده است، اما میزان اثر آن به بار کاری، کوئریها و معماری کل فروشگاه وابسته است.
سؤالات متداول
آیا هشدار ناسازگاری HPOS به معنی خراببودن افزونه است؟
نه لزوماً. هشدار باید جدی گرفته شود، اما علت آن ممکن است به نحوه اعلام سازگاری یا استفاده از APIهای قدیمی مرتبط باشد. بررسی کد، نسخه افزونه و آزمون در محیط آزمایشی برای تصمیمگیری لازم است.
آیا میتوان HPOS را بدون پشتیبانگیری فعال کرد؟
توصیه نمیشود. تغییر روش ذخیرهسازی سفارشها بر دادههای تجاری مهم اثر میگذارد. پیش از مهاجرت باید نسخه پشتیبان قابل بازیابی، محیط آزمایشی و برنامه بررسی صحت سفارشها داشته باشید.
آیا استفاده از get_post_meta برای سفارشها همیشه اشتباه است؟
این تابع برای متادیتای انواع محتوای وردپرس کاربرد دارد، اما نباید برای دسترسی عمومی به متادیتای سفارشهای ووکامرس، مستقل از روش ذخیرهسازی، جایگزین API سفارش شود. برای این کاربرد معمولاً متدهای شیء سفارش مانند get_meta() و update_meta_data() انتخاب مناسبتری هستند.
آیا با اضافهکردن اعلان سازگاری، خطای HPOS برطرف میشود؟
خیر. اعلان سازگاری به ووکامرس اطلاع میدهد که افزونه از قابلیت پشتیبانی میکند. اگر کد همچنان به جداول یا صفحات قدیمی وابسته باشد، باید آن را اصلاح و رفتار واقعی افزونه را آزمون کنید.
پس از مهاجرت، کدام بخشها را باید آزمایش کرد؟
حداقل عملیات ثبت سفارش، پرداخت، تغییر وضعیت، لغو، بازپرداخت، موجودی، ایمیلها و اتصالهای جانبی مورد استفاده فروشگاه را بررسی کنید. اگر فروشگاه از اشتراک، رزرو یا سفارشیسازیهای اختصاصی استفاده میکند، آن مسیرها نیز باید در سناریوهای آزمون قرار گیرند.
جمعبندی
رفع هشدار ناسازگاری HPOS با حذف پیام هشدار یا تغییر یک گزینه به پایان نمیرسد. ابتدا باید وضعیت افزونهها و روش ذخیرهسازی را مشخص کرد، سپس کدهای وابسته به سفارشها و وضعیت همگامسازی را بررسی کرد. مهاجرت و آزمون را در محیط کنترلشده انجام دهید و فقط پس از تأیید صحت عملیات، تغییر را به فروشگاه اصلی منتقل کنید.
برای مطالعه آموزشهای مرتبط، به دسته ووکامرس در دنیای وردپرس مراجعه کنید.
منابع فنی:
محصولات پیشنهادی مرتبط با این مقاله
افزونهها و ابزارهایی که راهاندازی و نگهداری سایت وردپرسی شما را سادهتر میکنند.
افزونه Smart Offers ووکامرس | پیشنهاد فروش هوشمند و هدفمند
افزونه Smart Offers ووکامرس با قابلیتهایی مانند Upsell، Cross-Sell و Downsell به شما کمک میکند پیشنهادهای فروش هدفمند ایجاد، محصولات…

افزونه WP Story Premium | ساخت استوری اینستاگرامی در وردپرس و نمایش استوری در سایت
افزونه WP Story Premium | ساخت استوری اینستاگرام در وردپرس و نمایش استوری در سایت امروزه کاربران به تجربههای سریع،…
افزونه اشتراک ویژه وردپرس و ووکامرس سلطان
افزونه اشتراک ویژه وردپرس و ووکامرس سلطان قدرتمندترین افزونهٔ مدیریت دسترسی، فروش هوشمند محتوا و اشتراکگذاری در اکوسیستم وردپرس فارسی!…








دیدگاهها
نظر، پرسش یا تجربهٔ خود را درباره این مقاله با دیگران به اشتراک بگذارید.
هنوز دیدگاهی ثبت نشده است.
اولین نفری باشید که دیدگاه خود را درباره این مقاله ثبت میکند.