برای این که محصولات ووکامرسی که همه متغیرهای آن ناموجود هستند را به انتهای لیست فروشگاه و صفحه اول منتقل کنید، باید به هوک‌های پیش‌فرض وردپرس و ووکامرس متصل شویم و اولویت مرتب‌سازی محصولات را بر اساس وضعیت موجودی آنها تنظیم کنیم تا انتهای این آموزش با رادیب همراه باشید.

توضیح مراحل:

  1. محصولات با تمام متغیرهای ناموجود شناسایی شوند.
  2. هوک مربوط به ترتیب نمایش محصولات در ووکامرس تغییر کند.
  3. محصولات ناموجود به انتهای لیست منتقل شوند.

کد کامل برای اضافه کردن به فایل functions.php:

خرید هاست وردپرسی پرسرعت cPanel و DircetAdmin با بهترین قیمت از رادیب، کلیک کنید

بهینه‌سازی:

  1. استفاده از query مستقیم به پایگاه داده: به جای استفاده از متا کوئری پیچیده.
  2. فیلتر هوشمند در posts_clauses: بهینه‌ترین روش برای اعمال تغییرات به ترتیب کوئری بدون کاهش سرعت فروشگاه.

کد پیشنهادی:

// انتقال محصولات ناموجود به انتهای لیست فروشگاه
add_filter('posts_clauses', 'move_out_of_stock_products_to_end', 10, 2);
function move_out_of_stock_products_to_end($clauses, $query) {
    if (!is_admin() && is_woocommerce() && $query->is_main_query()) {
        
        global $wpdb;

        // شرط بررسی محصولات ناموجود
        $stock_status_table = "{$wpdb->prefix}postmeta";
        $clauses['join'] .= " LEFT JOIN $stock_status_table AS stock_status_meta ON ({$wpdb->posts}.ID = stock_status_meta.post_id AND stock_status_meta.meta_key = '_stock_status')";

        // انتقال محصولات موجود به ابتدای لیست
        $clauses['orderby'] = "CASE WHEN stock_status_meta.meta_value = 'outofstock' THEN 1 ELSE 0 END ASC, " . $clauses['orderby'];

    }
    return $clauses;
}
PHP

توضیحات:

  1. این کد از هوک posts_clauses استفاده می‌کند که مستقیماً SQL کوئری اصلی ووکامرس را تغییر می‌دهد.
  2. محصولات ناموجود با استفاده از متادیتای _stock_status به انتهای لیست منتقل می‌شوند.
  3. شرط SQL CASE WHEN باعث می‌شود محصولات ناموجود در انتها قرار گیرند.

خرید سرور مجازی اقتصادی از رادیب، کلیک کنید

مزایا:

  • بهینه و سریع: به دلیل تغییر مستقیم کوئری SQL.
  • عدم استفاده از متا کوئری پیچیده: بهبود عملکرد برای فروشگاه‌های بزرگ.

a. آیا به انتقال محصولات بر اساس اولویت‌های بیشتری مانند تاریخ یا دسته نیاز دارید؟
b. آیا توضیح بیشتری درباره نحوه بهینه‌سازی این کد می‌خواهید؟

با کارشناسان و برنامه نویسان رادیب، از طریق تیکت پشتیبانی، در ارتباط باشید. 

آیا این پاسخ به شما کمک کرد؟ 200 کاربر این را مفید یافتند (200 نظرات)