Często w sklepach internetowych zarządzanych przez WooCommerce spotykamy się z wyzwaniem, jak prawidłowo wyświetlać ceny dla produktów z wariantami. Domyślnie WooCommerce pokazuje zakres cen od najniższej do najwyższej, co może być mylące dla klientów. W tym artykule przedstawię snippet, który umożliwia wyświetlanie minimalnej ceny produktu z wariantami z etykietą „Od”.
Problem: Wyświetlanie zakresu cen dla produktów z wariantami
W standardowym ustawieniu WooCommerce, gdy mamy produkty z różnymi wariantami cenowymi, sklep pokazuje zakres cen, np. „20 zł – 50 zł”. Może to być mylące, ponieważ klienci na pierwszy rzut oka mogą nie wiedzieć, która cena odnosi się do którego wariantu.
Rozwiązaniem jest wyświetlanie minimalnej ceny z etykietą „Od”, co jest bardziej przejrzyste.
Poniżej zamieszczam fragment kodu (snippet) PHP, który możemy dodać do naszego projektu WordPress. Snippet pozwoli na wyświetlanie bardziej intuicyjnych cen zarówno w kartach produktów jak i w widgetach, np. na stronie głównej.
add_filter('woocommerce_variable_price_html', 'ezpage_variation_price_from', 10, 2);
function ezpage_variation_price_from($price, $product) {
// Pobierz ceny min/max - zwykle i wariantowe
$min_var_reg_price = $product->get_variation_regular_price('min', true);
$min_var_sale_price = $product->get_variation_sale_price('min', true);
$max_var_reg_price = $product->get_variation_regular_price('max', true);
$max_var_sale_price = $product->get_variation_sale_price('max', true);
// Nowy $price, chyba ze wszystkie warianty mają takie same ceny + dodanie "od"
if (!($min_var_reg_price == $max_var_reg_price && $min_var_sale_price == $max_var_sale_price)) {
if ($min_var_sale_price < $min_var_reg_price) {
$price = sprintf(__('Od <del>%1$s</del><ins>%2$s</ins>', 'woocommerce'), wc_price($min_var_reg_price), wc_price($min_var_sale_price));
} else {
$price = sprintf(__('Od %1$s', 'woocommerce'), wc_price($min_var_reg_price));
}
}
// Zwrot $price
return $price;
}
Rezultat w po uruchomieniu kodu prezentuje się następująco:
Jak działa snippet?
- Dodanie filtra: Snippet zaczyna się od dodania filtra
woocommerce_variable_price_html
przy użyciu funkcjiadd_filter
, która pozwala na modyfikację sposobu wyświetlania cen produktów zmiennych. - Pobieranie minimalnych i maksymalnych cen: Użycie metod
get_variation_regular_price
orazget_variation_sale_price
pozwala na pobranie minimalnych i maksymalnych cen regularnych i promocyjnych dla wariantów produktu. - Warunkowe formatowanie ceny: Jeśli ceny wariantów nie są równe, kod formatuje cenę, dodając etykietę „Od”. W przypadku ceny promocyjnej, cena regularna jest przekreślona, a cena promocyjna jest wyświetlana obok.
- Zwracanie zmodyfikowanej ceny: Na końcu, funkcja zwraca zmodyfikowaną wartość
$price
, która jest wyświetlana w karcie produktu, ale również w każdym innym miejscu z ceną wariantową.
Dlaczego warto używać tej modyfikacji?
Snippet pomaga w lepszym prezentowaniu cen produktów z wariantami w WooCommerce, co może poprawić przejrzystość oferty i ułatwić klientom zrozumienie cen. Jest to szczególnie przydatne w sklepach oferujących produkty w różnych konfiguracjach cenowych, gdzie minimalizacja zamieszania związanego z cenami może zwiększyć konwersje i satysfakcję klientów.