Kontakt
Jesteśmy dostępni 6 godzin na dobę, 7 dni w tygodniu. Zadzwoń teraz od 10 do 16

Jeśli prowadzisz sklep internetowy na WooCommerce, zapewne zależy Ci na jak najlepszym doświadczeniu użytkownika. Domyślnie WooCommerce nie pozwala na automatyczne przenoszenie wyprzedanych produktów na koniec listy. Może to prowadzić do sytuacji, w której klienci widzą najpierw produkty niedostępne, co nie jest optymalne. Na szczęście można to zmienić za pomocą prostego fragmentu kodu.

W tym artykule pokażę Ci, jak w prosty sposób zmodyfikować kolejność wyświetlania produktów tak, aby produkty wyprzedane zawsze znajdowały się na końcu listy, a jednocześnie zachować ręcznie ustawioną kolejność produktów.

Jak działa kod przenoszenia produktów o stanie magazynowym zero na koniec listy?

Poniższy kod wykorzystuje hook pre_get_posts, który pozwala na modyfikację głównego zapytania WordPressa jeszcze przed jego wykonaniem. W mojej funkcji move_out_of_stock_to_end sprawdzam, czy użytkownik przegląda stronę sklepu (is_shop()) lub stronę kategorii (is_product_category()). Jeśli tak, ustawiam odpowiednie sortowanie:

  1. Produkty dostępne na stanie (instock) oraz te w zamówieniu (onbackorder) są wyświetlane w pierwszej kolejności.
  2. Produkty wyprzedane (outofstock) przesuwane są na koniec.
  3. Zachowana zostaje ręcznie ustawiona kolejność produktów (menu_order).
  4. Jeśli nie ustawiono ręcznego sortowania, produkty sortowane są według daty dodania (date), aby nowe produkty były na początku.

Oto kod, który osiąga ten efekt:

function move_out_of_stock_to_end($query) {
    if (is_admin() || !$query->is_main_query() || (!is_shop() && !is_product_category())) {
        return;
    }

    // Sprawdź, czy nie ma już ustawionego innego sortowania
    if (isset($_GET['orderby'])) {
        return;
    }

    $query->set('orderby', array(
        'meta_value' => 'ASC',  // dla stock_status
        'menu_order' => 'ASC',  // zachowuje kolejność menu
        'date' => 'DESC'        // fallback na datę
    ));

    $query->set('meta_key', '_stock_status');

    // Dodaj tax query dla wykluczenia out-of-stock
    $meta_query = array(
        'relation' => 'OR',
        array(
            'key' => '_stock_status',
            'value' => 'instock',
            'compare' => '='
        ),
        array(
            'key' => '_stock_status',
            'value' => 'onbackorder',
            'compare' => '='
        ),
        array(
            'key' => '_stock_status',
            'value' => 'outofstock',
            'compare' => '='
        )
    );

    $query->set('meta_query', $meta_query);
}
add_action('pre_get_posts', 'move_out_of_stock_to_end');

Jak dodać kod do WordPressa?

Aby dodać ten kod do swojej strony, wykonaj następujące kroki:

  1. Przejdź do kokpitu WordPressa.
  2. W menu po lewej stronie wybierz Wygląd > Edytor plików motywu.
  3. Znajdź i otwórz plik functions.php swojego motywu.
  4. Wklej kod na końcu pliku i zapisz zmiany.

Jeśli używasz motywu potomnego, zaleca się dodanie tego kodu właśnie tam, aby uniknąć jego utraty podczas aktualizacji głównego motywu.

Dzięki powyższemu rozwiązaniu Twój sklep WooCommerce automatycznie przesunie produkty wyprzedane na koniec listy, zachowując jednocześnie ustaloną ręcznie kolejność. Dzięki temu poprawisz doświadczenie użytkowników i zwiększysz szanse na sprzedaż dostępnych produktów. Jeśli masz jakiekolwiek pytania lub chcesz dostosować kod do swoich potrzeb, daj mi znać w komentarzach!