Dodano 2018-10-12 09:59:20 przez Daniel
Woocommerce nie bez powodu jest najpopularniejszych rozszerzeniem do WordPressa służącym do stawiania sklepów internetowych. Oprócz podstawowych funkcjonalności takich jak dodawanie, wyświetlanie i możliwość sprzedaży produktów ma także szereg funkcji dodatkowych. Jedną z takich funkcji są atrybuty produktu, na podstawie, których można tworzyć warianty. Możliwość dodawania i zarządzania atrybutami otwiera furtkę na kolejne możliwości jak sortowanie i filtrowanie po atrybutach oraz ustalanie różnych cen dla jednego produktu. Po prostu wachlarz możliwości jest spory, ale jak to ugryźć?
Aby dodać atrybuty do produktu należy najpierw dodać je w woocommerce. Aby tego dokonać należy wybrać z menu kokpitu Produkty, Atrybuty.
Tutaj sprawa jest dość prosta, w zasadzie wystarczy podać nazwę atrybutu ale można tutaj także zdefiniować bezpośredni odnośnik, aktywować archiwa lub określić sortowanie. W moim przypadku potrzebuję dodać atrybut Pojemność, więc podaję nazwę i klikam „Dodaj atrybut”.
Po dodaniu atrybut powinien się pojawić w tabelce po prawej stronie, tam można kliknąć jego nazwę lub konfigurację taksonomii aby dodać możliwe do wyboru opcje.
Ja na mojej stronie mam cztery flakoniki z perfumami, które występują w trzech wielkościach. Dlatego też dodaję trzy opcje.
Warto zwrócić uwagę że można tutaj także sortować atrybuty metodą przeciągnij i upuść, dzięki czemu będą się wyświetlały później na liście wyboru w produkcie w oczekiwanej kolejności.
Teraz kiedy mamy już zdefiniowane jakieś atrybuty możemy przejść do produktu.
Kolejnym krokiem jest stworzenie wariantów produktów. Aby tego dokonać wchodzimy w wybrany produkt, zmieniamy Dane produktu na Produkt z wariantami , a następnie atrybuty tego produktu. Aby dodać wariant najpierw musimy dodać atrybuty na podstawie których utworzymy warianty, dlatego też taka kolejność jest wymagana.
Najpierw dodajemy atrybut, który określiliśmy wcześniej w moim przypadku wybieram pojemność i klikam „Dodaj”.
Kolejnym krokiem jest dodanie wariantów atrybuty. W moim przypadku produkt będzie dostępny w trzech wariantach pojemnościowych a więc dodaję wszystkie w tym miejscu i zaznaczam opcję „Dla wariantów”. Klikam zapisz atrybuty i przechodzę do wariantów z menu tego panelu po lewej.
Tutaj możemy po prostu dodać wariant, co zapewne będzie stosowane w większości przypadków lub tak jak w moim przypadku można po prostu utworzyć warianty ze wszystkich atrybutów co oznacza że skoro mam trzy pojemności to zgodnie z tym co wcześniej zaznaczyłem utworzą mi się trzy warianty produktu 15ml, 50ml i 100ml.
Po wybraniu tej drugiej opcji system system zada pytania typu „czy na pewno” w moim przypadku zatwierdzam i idę dalej. Po dodaniu wariantów mam ich listę. W tym miejscu mogę rozwinąć taki wariant i uzupełnić całe mnóstwo opcji dla niego.
Tutaj koniecznie trzeba zapisać cenę regularną, jest to wymagane aby produkt był dostępny, należy to uzupełnić i zaktualizować.
No i chyba na tyle jeśli chodzi o atrybuty i warianty w panelu administratora, przynajmniej jeśli chodzi o podstawy podstaw. Teraz wypadałoby coś zakodować.
Ogólnie dopisuję tutaj ciąg dalszy do mojego poprzedniego wpisu dlatego radzę się z nim także zapoznać.
Jeśli chodzi o pobranie wartości atrybutu lub listy nie jest to zbyt skomplikowane. Grunt to wiedzieć jaki atrybut chcemy pobrać jeśli chodzi o jeden z nich, a jego klucz/slug/taxonomię możemy odczytać z linku po wejściu w edycję danego atrybutu.
W tym przypadku moja taxonomia to będzie pa_pojemnosc. Te nazwy zazwyczaj zaczynają się od „pa_”. Skoro już to mam przechodzę do kodowania.
$attr_poj = $product->get_attribute( 'pa_pojemnosc' ); echo var_dump($attr_poj);
W ten sposób mogę pobrać atrybut i wyświetlić obiekt, który mi zwrócił.
W ten sposób mogę wyświetlić dane warianty atrybutu produktu, czyli to co jest mi potrzebne w moim indywidualnym szablonie produktu.
Ale nic nie stoi nam na drodze żeby wyświetlić wszystkie atrybuty danego produktu, co pewnie będzie częściej wykorzystywane niż pojedynczy atrybut. W tym celu wykorzystujemy funkcję get_attributes(), która zwraca listę atrybutów produktu i tak gdybym chciał listę:
echo json_encode($product->get_attributes());
W ten sposób jedną linijką kodu pobieram i wyświetlam atrybuty w formacie json, ogólnie wolęten format niż var_dump, pewnie z przyzwyczajenia. Otrzymałem następujący wynik:
{„pa_pojemnosc”:{}}
Wykorzystując var_dump otrzymał bym:
array(1) { [„pa_pojemnosc”]=> object(WC_Product_Attribute)#10763 (1) { [„data”:protected]=> array(6) { [„id”]=> int(1) [„name”]=> string(12) „pa_pojemnosc” [„options”]=> array(3) { [0]=> int(18) [1]=> int(16) [2]=> int(17) } [„position”]=> int(0) [„visible”]=> bool(true) [„variation”]=> bool(true) } } }
czyli tablicę obiektów, tak więc przechodząc po elementach tablicy mogę wyświetlić wszystkie atrybuty danego produktu. To by chyba wyczerpywało temat atrybutów teraz czas przejść dalej
W moim projekcie potrzebuję jeszcze informacje o wariantach produktu. Pobranie tych informacji także jest bardzo łatwe.
if ($product->is_type( 'variable' )) { $available_variations = $product->get_available_variations(); } else { $available_variations = null; }
W powyższym kodzie najpierw sprawdzam czy produkt w ogóle ma jakieś warianty a następnie przypisuję warianty do zmiennej. Ważne aby w panelu była podana cena wariantu inaczej funkcja nie zwróci dostępnych wariantów.
Powyższy kod możemy spokojnie umieścić w listingu produktów wraz z produktami bez wariantów. Dla mojego produktu z atrybutami pojemności otrzymam:
{ [0]=> array(24) { [„attributes”]=> array(1) { [„attribute_pa_pojemnosc”]=> string(5) „15-ml” } [„availability_html”]=> string(51) ”
Brak w magazynie
” [„backorders_allowed”]=> bool(false) [„dimensions”]=> array(3) { [„length”]=> string(0) „” [„width”]=> string(0) „” [„height”]=> string(0) „” } [„dimensions_html”]=> string(4) „brak” [„display_price”]=> float(25) [„display_regular_price”]=> float(25) [„image”]=> array(18) { [„title”]=> string(6) „obraz4” [„caption”]=> string(0) „” [„url”]=> string(64) „https://***/wp-content/uploads/2018/09/obraz4.png” [„alt”]=> string(0) „” [„src”]=> string(64) „https://****/wp-content/uploads/2018/09/obraz4.png” [„srcset”]=> string(148) „https://****/wp-content/uploads/2018/09/obraz4.png 500w, https://***/wp-content/uploads/2018/09/obraz4-300×270.png 300w” [„sizes”]=> string(31) „(max-width: 500px) 100vw, 500px” [„full_src”]=> string(64) „https://***/wp-content/uploads/2018/09/obraz4.png” [„full_src_w”]=> int(500) [„full_src_h”]=> int(450) [„gallery_thumbnail_src”]=> string(72) „https://****/wp-content/uploads/2018/09/obraz4-100×100.png” [„gallery_thumbnail_src_w”]=> int(100) [„gallery_thumbnail_src_h”]=> int(100) [„thumb_src”]=> string(72) „https://***/wp-content/uploads/2018/09/obraz4-300×300.png” [„thumb_src_w”]=> int(300) [„thumb_src_h”]=> int(300) [„src_w”]=> int(500) [„src_h”]=> int(450) } [„image_id”]=> string(2) „71” [„is_downloadable”]=> bool(false) [„is_in_stock”]=> bool(false) [„is_purchasable”]=> bool(true) [„is_sold_individually”]=> string(2) „no” [„is_virtual”]=> bool(false) [„max_qty”]=> string(0) „” [„min_qty”]=> int(1) [„price_html”]=> string(146) „£25.00” [„sku”]=> string(0) „” [„variation_description”]=> string(0) „” [„variation_id”]=> int(91) [„variation_is_active”]=> bool(true) [„variation_is_visible”]=> bool(true) [„weight”]=> string(0) „” [„weight_html”]=> string(4) „brak” } [1]=> array(24) { [„attributes”]=> array(1) { [„attribute_pa_pojemnosc”]=> string(5) „50-ml” } [„availability_html”]=> string(51) ”
….
Czyli tablicę wariantów z całą masą bardziej lub mniej użytecznych informacji. następnie mogę sobie pobrać jakąś interesującą mnie wartość na przykład cenę.
echo $available_variations[0]['display_regular_price'];
Powyższy kod wyświetli cenę pierwszego z wariantów, najlepiej wrzucić je w pętlę i w podobny sposób odnieść się do wszystkich.
To by chyba rozwiązywało większość problemów z atrybutami i wariantami, jeśli się mylę pisz na facebooku