برای اینکه در پیشخوان وردپرس، محصولات ووکامرس را بر اساس موجودی (Stock) مرتب کنید تا بدانید کدام محصولات تمام شده‌اند یا موجودی کمی دارند، دو روش ساده وجود دارد:

۱. استفاده از ستون «موجودی» (سریع‌ترین روش)


به‌طور پیش‌فرض در لیست محصولات ووکامرس، ستونی برای وضعیت موجودی وجود دارد:

به مسیر محصولات > همه محصولات بروید.

در بالای جدول محصولات، روی عنوان ستون «موجودی» (Stock) کلیک کنید.

با یک بار کلیک، محصولات از «ناموجود» به «موجود» مرتب می‌شوند. با کلیک دوباره، ترتیب برعکس می‌شود.

۲. فیلتر کردن بر اساس وضعیت موجودی


اگر می‌خواهید فقط محصولات ناموجود یا محصولات با موجودی کم را ببینید:

در همان صفحه همه محصولات، به بالای جدول نگاه کنید.

روی منوی کشویی «انتخاب وضعیت موجودی» (معمولاً کنار منوی دسته‌بندی‌ها است) کلیک کنید.

یکی از گزینه‌های زیر را انتخاب کرده و روی دکمه صافی (Filter) کلیک کنید:

موجود در انبار

در انبار موجود نیست (Out of stock)

پیش‌ خرید

تنظیمات پیشرفته (اگر ستون موجودی را نمی‌بینید)


اگر ستون موجودی در جدول شما نمایش داده نمی‌شود:

در بالای صفحه سمت چپ، روی دکمه تنظیمات صفحه (Screen Options) کلیک کنید.

تیک گزینه موجودی (Stock) را بزنید و دکمه اجرا (Apply) را کلیک کنید.

مرتب‌سازی خودکار در سایت (برای مشتریان)


اگر قصد دارید محصولات را در سمت کاربر (فروشگاه) طوری مرتب کنید که همیشه ناموجودها به انتهای لیست بروند، بهترین راه استفاده از یک قطعه کد کوچک در functions.php است.

برای اینکه محصولات ناموجود به‌صورت خودکار به انتهای لیست در صفحات فروشگاه منتقل شوند، کد زیر را به فایل functions.php قالب خود اضافه کنید:

/**
 * انتقال محصولات ناموجود به انتهای لیست در ووکامرس
 */
add_filter( 'posts_clauses', 'farjad_order_by_stock_status', 2000 );
function farjad_order_by_stock_status( $posts_clauses ) {
    global $wpdb;

    // فقط در صفحات فروشگاه و آرشیو محصولات اعمال شود
    if ( is_admin() || ! is_post_type_archive( 'product' ) && ! is_tax( get_object_taxonomies( 'product' ) ) ) {
        return $posts_clauses;
    }

    $posts_clauses['join'] .= " INNER JOIN {$wpdb->postmeta} AS mt_stock ON ({$wpdb->posts}.ID = mt_stock.post_id) ";
    $posts_clauses['where'] .= " AND mt_stock.meta_key = '_stock_status' ";
    $posts_clauses['orderby'] = " mt_stock.meta_value ASC, " . $posts_clauses['orderby'];

    return $posts_clauses;
}

این کد چطور کار می‌کند؟

  • اولویت‌بندی وضعیت: وضعیت موجودی در دیتابیس ووکامرس به صورت instock (موجود) و outofstock (ناموجود) ذخیره می‌شود. از آنجا که حرف i قبل از o قرار دارد، با مرتب‌سازی صعودی (ASC)، محصولات موجود بالا می‌آیند و ناموجودها به ته لیست می‌روند.
  • عدم تداخل با ادمین: این کد طوری تنظیم شده که در پیشخوان (Admin) دخالتی نکند تا شما همان‌جا طبق روشی که قبلاً گفتم، محصولات را مدیریت کنید.