Zarządzanie dużą liczbą produktów w sklepie internetowym bywa czasochłonne, zwłaszcza gdy często pracujesz z wybranym asortymentem. W tym wpisie pokażemy, jak wyświetlić priorytetowe produkty WooCommerce na początku listy produktów w panelu admina, bez ukrywania reszty oferty.
Dlaczego warto ustawić priorytetowe produkty WooCommerce?
W sklepach z rozbudowanym katalogiem często zachodzi potrzeba szybkiego dostępu do konkretnych produktów – np. nowości, promocji lub bestselerów. Dzięki drobnej modyfikacji kodu PHP możesz wskazać konkretne ID produktów lub całą kategorię, które mają być zawsze widoczne na górze listy w zakładce „Wszystkie produkty”.
Jak działa ten kod PHP?
Kod wykorzystuje hak pre_get_posts, by zmodyfikować zapytanie WordPressa wyświetlające produkty w panelu administracyjnym. Dodatkowo, filtr posts_orderby zmienia kolejność produktów tak, by najpierw pokazać priorytetowe produkty, a dopiero później resztę – posortowaną domyślnie według daty dodania.
Kod nie ukrywa innych produktów – tylko zmienia kolejność ich wyświetlania, co zachowuje pełną funkcjonalność filtrowania i wyszukiwania.
Jak wdrożyć kod w swoim sklepie?
- Skopiuj podany kod PHP.
- Wklej go do pliku functions.php Twojego motywu potomnego (child theme) lub użyj wtyczki takiej jak Code Snippets.
- Zmień ID produktów i kategorii na te, które chcesz traktować jako priorytetowe.
To wszystko – od teraz Twoje priorytetowe produkty WooCommerce zawsze będą na górze listy w panelu admina!
// Funkcja zmieniająca kolejność produktów w tabeli admina "Wszystkie produkty" w WooCommerce bez ukrywania reszty
add_action('pre_get_posts', function($query) {
if (!is_admin() || !$query->is_main_query()) {
return;
}
global $pagenow;
if ($pagenow !== 'edit.php' || $query->get('post_type') !== 'product') {
return;
}
// ID kategorii i produktów, które mają być zawsze na górze
$priority_category_id = 42;
$priority_product_ids = array(3798, 3799, 3800);
// Pobierz produkty z kategorii
$priority_query_args = array(
'post_type' => 'product',
'posts_per_page' => -1,
'fields' => 'ids',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => $priority_category_id,
),
),
);
$priority_products = get_posts($priority_query_args);
// Połącz wszystkie ważne produkty
$priority_products = array_unique(array_merge($priority_product_ids, $priority_products));
if (!empty($priority_products)) {
add_filter('posts_orderby', function($orderby, $query_inside) use ($priority_products) {
if (!is_admin() || !$query_inside->is_main_query() || $query_inside->get('post_type') !== 'product') {
return $orderby;
}
$ids_order = implode(',', $priority_products);
// Produkty priorytetowe pierwsze, potem reszta według daty utworzenia
return "FIELD(ID, $ids_order) DESC, post_date DESC";
}, 10, 2);
}
});
Zobacz również: Automatyczne Kompletowanie Zamówień w WooCommerce: Jak Przyspieszyć Realizację Produktów Cyfrowych
