انتقال خودکار محصولات ناموجود به انتهای لیست در ووکامرس (Sort Out-of-Stock Products Last)
با فیلتر `posts_clauses` در کوئری اصلی ووکامرس، شرط مرتبسازی را طوری تغییر دهید که اقلام دارای موجودی اول و ناموجودها در آخر قرار گیرند.
مشخصات فنی و شناسنامه کد (Code Information)
بازبینی: 1405/06/29<?php
/**
* انتقال خودکار محصولات ناموجود به انتهای لیست در کاتالوگ فروشگاه و دستهبندیها
*/
function bisco_sort_out_of_stock_products_last( $posts_clauses, $query ) {
// تنها در فرانتاند و در کوئری اصلی آرشیو فروشگاه اعمال شود
if ( ! is_admin() && $query->is_main_query() && ( is_shop() || is_product_taxonomy() ) ) {
global $wpdb;
$posts_clauses['join'] .= " LEFT JOIN {$wpdb->postmeta} AS bisco_stock ON ({$wpdb->posts}.ID = bisco_stock.post_id AND bisco_stock.meta_key = '_stock_status') ";
$posts_clauses['orderby'] = " CASE WHEN bisco_stock.meta_value = 'outofstock' THEN 1 ELSE 0 END ASC, " . $posts_clauses['orderby'];
}
return $posts_clauses;
}
add_filter( 'posts_clauses', 'bisco_sort_out_of_stock_products_last', 2000, 2 );
کد را کجا قرار دهیم؟ (Placement Guide)
کد را در functions.php ذخیره کنید.
این کد چگونه کار میکند؟ (How it Works)
با دستور SQL CASE WHEN وضعیت انبار بررسی میشود؛ محصولات دارای موجودی نمره ۰ و ناموجودها نمره ۱ میگیرند و در مرتبسازی ASC ابتدا موجودها و در انتها ناموجودها قرار میگیرند در حالی که مرتبسازی انتخابی کاربر (مانند ارزانترین/گرانترین) بعد از آن حفظ میشود.
چه زمانی از این کد استفاده کنیم؟ (Use Cases)
در تمام فروشگاههای آنلاین برای جلوگیری از نمایش کالاهای تمامشده در صدر ویترین.
چه زمانی نباید از این کد استفاده کنیم؟ (Anti-patterns)
در صورتی که در تنظیمات ووکامرس گزینه «مخفی کردن کالاهای ناموجود از کاتالوگ» را تیک زدهاید.
پیشنیازهای اجرا
ووکامرس فعال و دیتابیس MySQL/MariaDB.
نحوه تست و اطمینان از عملکرد
به صفحه فروشگاه بروید؛ محصولاتی که موجود نیستند به صفحات انتهایی یا پایین صفحه منتقل شدهاند.
نحوه بازگردانی سریع (Rollback)
فیلتر را حذف کنید.
خطاهای رایج و راهحل رفع
اعمال کد در پیشخوان مدیریت (کد ما دارای شرط `!is_admin()` است تا جدول ادمین دستنخورده بماند).
ملاحظات و نکات امنیتی
استفاده از ساختار استاندارد wpdb بدون خطر تزریق SQL.
تاثیر بر سرعت و پرفورمنس
یک اتصال سبک ایندکسشده بر روی کلید _stock_status بدون افت سرعت.