WooCommerce jest pełen filtrów, haczyków i funkcji, które pomogą Ci dostosować i wykorzystać wtyczkę w motywie lub wtyczce. Oto kilka małych, ale użytecznych przykładów kodu, a-ha i poradników na temat typowych zmian w różnych wyjściach tekstowych.
Zmiana tekstu przycisku „Dodaj do koszyka"
Istnieją dwa filtry; jeden dla tekstów „dodaj do koszyka” w pętli (woocommerce_product_add_to_cart_text), a drugi dla przycisku w pojedynczym produkcie (woocommerce_product_single_add_to_cart_text):
// Single product view
add_filter('woocommerce_product_single_add_to_cart_text', function($text) {
return __('Buy this now', 'txtdomain');
});
// Loop
add_filter('woocommerce_product_add_to_cart_text', function($text) {
return __('Buy this', 'txtdomain');
});
Pamiętaj jednak, że zastępuje to wszystkie teksty „Dodaj do koszyka”. Nawet te, które pierwotnie były „Wybierz opcje” (produkty zmienne) lub „Dowiedz się więcej” (produkty nie do kupienia – brak ceny lub brak w magazynie). Jeśli chcesz dokładniej dostroić, dołącz drugi argument do tych filtrów; obiekt produktu. Użyj obiektu produktu, aby warunkowo sterować danymi wyjściowymi. Na przykład według rodzaju produktu lub tego, czy produkt można kupić:
add_filter('woocommerce_product_add_to_cart_text', function($text, $product) {
if ($product->is_type('variable')) {
return __('Take your pick', 'txtdomain');
}
if (!$product->is_purchasable()) {
return __('Read more', 'txtdomain');
}
return $text;
}, 10, 2);
Zmień dane wyjściowe przedziału cenowego na produkty zmienne i pogrupowane
Domyślnie WooCommerce wyświetla najniższą i najwyższą cenę na produktach zmiennych i pogrupowanych, ze znakiem „-” pomiędzy. Możesz bardzo łatwo modyfikować ten zakres wyjściowy. Na przykład upewnij się, że pokazuje tylko najniższą cenę w postaci „Od:”. WooCommerce ma jeden filtr dla produktów zmiennych, a drugi dla produktów zgrupowanych, więc spójrzmy na oba po kolei.
Kontrolowanie wyników HTML przedziału cenowego dla produktów zmiennych odbywa się za pomocą filtra woocommerce_variable_price_html. Jako drugi argument podano obiekt produktu.
Wewnątrz funkcji musimy pobrać wszystkie ceny. WooCommerce oferuje przydatną funkcję na zmiennych obiektach produktów, get_variation_prices(). Zwraca tablicę wszystkich cen wariantów, posortowanych według najniższych. Wszystko, co musimy zrobić, jeśli wyskoczymy z pierwszego elementu tablicy cen i wypiszemy go ładnie:
add_filter('woocommerce_variable_price_html', function($html, $product) {
$prices = $product->get_variation_prices(true);
$from_price = wc_price(current($prices['price']));
return sprintf(__('From: %s', 'txtdomain'), $from_price. $product->get_price_suffix());
}, 10, 2);
Filtr wyjściowy HTML przedziału cenowego dla zgrupowanych produktów jest bardzo podobny do produktów zmiennych, ale z jedną różnicą; tablica wszystkich zgrupowanych cen produktów „dziecięcych” jest dołączona jako argument do filtra. Filtr, którego należy użyć to woocommerce_grouped_price_html:
add_filter('woocommerce_grouped_price_html', function($html, $product, $child_prices) {
$from_price = wc_price(current($child_prices));
return sprintf(__('From: %s', 'txtdomain'), $from_price. $product->get_price_suffix());
}, 10, 3);
Zmodyfikuj wyjście tekstowe stanu zapasów
Jeśli aktywowałeś wyświetlanie stanu magazynowego w ustawieniach WooCommerce, powinien on wyświetlać dokładną ilość pozostałych zapasów w widoku pojedynczego produktu (np. „42 w magazynie”). Możesz jednak zmodyfikować dane wyjściowe, aby zamiast tego pokazywały zakres, a nie dokładną kwotę. Lub po prostu „W magazynie”, jeśli chcesz ukryć numer.
Filtrem do tego jest woocommerce_get_stock_htmli jeśli uwzględnisz drugi argument, otrzymasz obiekt produktu. Za pomocą obiektu produktu możesz wykonać niezbędne operacje w celu dostrojenia danych wyjściowych. Pamiętaj, że filtrowalne wyjście jest zawinięte wewnątrz <p>elementu, a twoje wyjście również powinno.
Aby po prostu wyświetlić „W magazynie” lub „Nie w magazynie”, wystarczy:
add_filter('woocommerce_get_stock_html', function($html, $product) {
if ($product->is_in_stock()) {
return sprintf('<p class="stock in-stock">%s</p>', __('In stock', 'txtdomain'));
} else {
return sprintf('<p class="stock out-of-stock">%s</p>', __('Out of stock', 'txtdomain'));
}
return $html;
}, 10, 2);
Pokazywanie zapasów w „wartościach zakresu” można wykonać w następujący sposób:
add_filter('woocommerce_get_stock_html', function($html, $product) {
$current_stock = $product->get_stock_quantity();
if ($current_stock <= 0) {
$new_html = __('Out of stock', 'txtdomain');
} else if ($current_stock > 500) {
$new_html = sprintf('500+ %s', __('in stock', 'txtdomain'));
} else if ($current_stock > 100) {
$new_html = sprintf('100+ %s', __('in stock', 'txtdomain'));
} else if ($current_stock > 20) {
$new_html = sprintf('20+ %s', __('in stock', 'txtdomain'));
} else {
$new_html = __('In stock', 'txtdomain');
}
return sprintf('<p class="stock">%s</p>', $new_html);
}, 10, 2);
Zmień nazwę statusów zamówień
Czasami klient chce, aby różne etykiety na statusach zamówienia miały większy sens zgodnie z jego praktykami w sklepie internetowym. Na przykład możesz zmienić nazwę „Wstrzymane” na „Niewysłane” lub „Zakończono” na „Wysłane”. Żeby było bardziej sensownie, które zamówienia należy wysłać, a które już zostały wysłane. WooCommerce oferuje prosty filtr, wc_order_statuses, na wszystkich dostępnych nazwach statusów zamówień.
add_filter('wc_order_statuses', function($order_statuses) {
$order_statuses['wc-on-hold'] = __('Unsent', 'txtdomain');
$order_statuses['wc-completed'] = __('Sent', 'txtdomain');
return $order_statuses;
});
Dostępne klawisze to wc-pending, wc-processing, wc-on-hold, wc-completed, wc-cancelled, wc-refunded, i wc-failed.