ووکامرس (WooCommerce) Posts Clauses Filter پلتفرم: woocommerce پیشرفته (Hard) سطح ریسک: متوسط (Medium Risk)

انتقال خودکار محصولات ناموجود به انتهای لیست در ووکامرس (Sort Out-of-Stock Products Last)

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

با فیلتر `posts_clauses` در کوئری اصلی ووکامرس، شرط مرتب‌سازی را طوری تغییر دهید که اقلام دارای موجودی اول و ناموجودها در آخر قرار گیرند.

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

بازبینی: 1405/06/29
پلتفرم اجرایی (Platform) woocommerce
نوع کد (Code Type) Posts Clauses Filter
محل قرارگیری فایل (Location) functions.php
سطح دشواری (Difficulty) پیشرفته (Hard)
سطح ریسک (Risk Level) متوسط (Medium Risk)
نیاز به بکاپ اولیه؟ بله، حتماً بکاپ بگیرید
سازگاری با وردپرس تمامی نسخه‌های وردپرس
سازگاری با ووکامرس و HPOS سازگار کامل با ساختار HPOS
هشدار ایمنی: این تغییر مستقیماً فایل‌های حساس سرور یا دیتابیس را ویرایش می‌کند. حتماً پیش از ذخیره کد از وب‌سایت یا فایل مورد نظر فایل پشتیبان (Backup) تهیه کنید.
|
<?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 ذخیره کنید.

مسیر فایل: functions.php

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

با دستور SQL CASE WHEN وضعیت انبار بررسی می‌شود؛ محصولات دارای موجودی نمره ۰ و ناموجودها نمره ۱ می‌گیرند و در مرتب‌سازی ASC ابتدا موجودها و در انتها ناموجودها قرار می‌گیرند در حالی که مرتب‌سازی انتخابی کاربر (مانند ارزان‌ترین/گران‌ترین) بعد از آن حفظ می‌شود.

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

در تمام فروشگاه‌های آنلاین برای جلوگیری از نمایش کالاهای تمام‌شده در صدر ویترین.

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

در صورتی که در تنظیمات ووکامرس گزینه «مخفی کردن کالاهای ناموجود از کاتالوگ» را تیک زده‌اید.

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

ووکامرس فعال و دیتابیس MySQL/MariaDB.

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

به صفحه فروشگاه بروید؛ محصولاتی که موجود نیستند به صفحات انتهایی یا پایین صفحه منتقل شده‌اند.

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

فیلتر را حذف کنید.

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

اعمال کد در پیشخوان مدیریت (کد ما دارای شرط `!is_admin()` است تا جدول ادمین دست‌نخورده بماند).

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

استفاده از ساختار استاندارد wpdb بدون خطر تزریق SQL.

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

یک اتصال سبک ایندکس‌شده بر روی کلید _stock_status بدون افت سرعت.

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

خیر، محصولات موجود بین خودشان بر اساس قیمت چیده می‌شوند و سپس محصولات ناموجود در انتها بر همان اساس قرار می‌گیرند.
منابع و مستندات رسمی بررسی‌شده (Official Sources):

سبد خرید شما

0 افزونه

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

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

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

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

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

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