WooCommerce – kosárba rakott teljes mennyiség maximalizálása

webatta
716 megtekintés

Előző bejegyzésemben azt mutattam be, hogyan tudod megadni az egyes termékek kosárba rakható mennyiségének minimumát és maximumát. Ebben a bejegyzésben azzal foglalkozom, hogyan tudod maximalizáli a kosárba rakott teljes mennyiséget.

Mikor lehet erre szükség?
Maradjunk az előző bejegyzésben vett példánál. Reklám termékeket árusítasz promóciós célból. Jelképes összegekért árusítasz céglogóddal ellátott kulcstartót, hűtőmágnest, tollat, műanyagpoharat. Az előző bejegyzésből vett kódrészlettel elérted, hogy maximum 5db-ot tehessen a vásárló a kosárba minden termékből. Ez így rendben is van, de te azt is el szeretnéd kerülni, hogy mind a négy termékedből megvásárolhassa a maximális mennyiséget, azaz összesen (5×4) 20 terméket. Azt szeretnéd, hogy maximum 10db terméket tudjon vásárolni. Ehhez a kosárba rakott összmennyiséget kell korlátoznod.

A kosárba rakott összmennyiség egy hosszabb kódrészlettel maximalizálható. Ehhez csak szövegszerkesztöre van szükség.

Célunk eléréséhez nekünk az aktuális téma vagy ha úgy tetszik sablon functions.php fájlját kell módosítanunk. Ezt a témád könyvtárában találod. Ha példának okáért a worpressel feltelepült témák közül te a TwentyTwntyone-t használod, akkor az elérési út wp-content/themes/twentytwentyone/functions.php. Megnyithatod a jegyzettömbbel, vagy lemásolhatod a gépedre, hogy meglegyen az eredeti, és annak egy másolatát szerkeszted, majd azzal írod felül a szerveren találhatót. A jegyzettömbben a fejlettebb szövegszerkesztőkkel vagy webfejlesztő alkalmazásokkal (pl. Dramweawer) szemben csak a legutolsó tevékenységekedet tudod visszavonni. Ha félsz, hogy valamit elrontasz, inkább egy másolati példányban dolgozz, és legyen meg az eredeti is. Szóval, nyisd meg a functions.php fájlt, görgess az aljára, és másold be az alábbi kódrészletet.

 add_action( 'woocommerce_checkout_process', 'webatta_minimum_order_amount' );

function webatta_minimum_order_amount() {
  $maximum = 10;
  $quantity = 0;
  foreach ( WC()->cart->get_cart() as $cart_item ) {
    $quantity += $cart_item['quantity'];
  }
  
  if ($quantity > $maximum ) {
    if( is_cart() ) {
      wc_print_notice( sprintf( 'A maximálisan megvásárolható mennyiség '.$maximum.' db.'), 'error' );
  } 
  else {
     wc_add_notice( sprintf( 'A maximálisan megvásárolható mennyiség '.$maximum.' db.'), 'error' );
  }
  remove_action( 'woocommerce_proceed_to_checkout','woocommerce_button_proceed_to_checkout', 20); }
  }
}

Mit csinál ez a kódrészlet?

Ha a vásárló a kosár oldalra lép és a kosárba rakott mennyiség meghaladja a maximumot (jelen esetben 10db), a kosár táblázat fölött hibaüzenet figyelmezteti, hogy meghaladta a megvásárolható mennyiséget, és a “Tovább a fizetés oldalra” gomb a kosár tartalma altt pedig inaktívvá válik. Vagyis addig nem tud ráklikkelni a vásárló, amég a felszólításban kiírt maximum érték alá nem módosítja a kosár tartalmát.
Egyszerű és elegáns megoldás.

Hogyan értük ezt el kód szintjén?

A cél megvalósításához meghívtunk egy wordpress kampót (woocommerce_checkout_process), ami a “Tovább a fizetéshez” gomb megnyomása után jövő fizetési és számlázási részhez készíti elő az adtokat és ellenőrzi, hogy minden rendben van-e a továbblépéshez. Erre a kampórá “ráakasztjuk” saját funkciónkat: webatta_minimum_order_amount(). A trükk gyakorlatilag ebben a funkcióban rejlik. Először meghatározzuk a kívánt maximum mennyiséget egy változóban ($maximum), és generálunk egy új változót ($quantity) egyelőre 0 értékkel. Egy foreach ciklusban addig és annyival növeljük ennek a változónak az értékét ahány termék amennyi darabszámban előfordul a kosarunkban. Így megkapjuk a kosár teljes darabszámát. Ez lesz a $quantity változó új értéke. Ezután már könnyű dolgunk van. Mindössze meg kell vizsgálnunk egy feltételes utasításban hogy ez az érték nagyobb-e mint a maximum. Ha igen, hibaüzenetet iratunk ki. Ennek más a módja kosár oldalon és megint más egy ettől eltérő helyen. Óvatosságból megvizsgáljuk az is_cart() funkcióval, hogy a látogató a kosár oldalon van-e. Ha igen, annak megfeleő módon a wc_print_notice() funkciót használjuk hibaüzenetünk kiratásához. Ha nem a kosár oldalon tartózkodik, akkor ennek helyes módja a wc_add_notice() funkció használata. A feltételes utasítás végén remove_action() funkcióval letiltjuk a “Tovább a fizetéshez” gombot.

Ha a kosárba rakott összmennyiség minimumát is meg szeretnéd határozni, csak meg kell határoznod egy új változót a funkció elején (pl $minimum), lemásolni a mennyiségeket vizsgáló feltételes utasítást, megfordítani a relációt és kicserélni a maximum változót a minimumra.

if ($quantity < $minimum ) {
   IDE JÖN A HIBAÜZENET
} 

Hát ennyi. Remélem hasznos lesz számodra ez a kicsit összetetteb kód WooCommerce kosarad tételeinek maximalizálására vagy minimalizálására. Ha igen, kérlek oszd meg velem a tapasztalataidat a bejegyzéshez való hozzászólásoddal. Ha úgy véled, más nagyobb hasunát tudja venni, küld el neki a bejegyzés linjét, de nyugodtan meg is oszthatod a Facebookon.

0 hozzászólás
0

Related Posts

Szólj hozzá!