Uneori vrem ca înainte de adăugarea unui produs în coș să golim coșul.
Aceasta se poate realiza folosind filtrul ‘woocommerce_add_to_cart_validation‘.
// inainte de adăugarea unui nou produs în coș, golește coșul
add_filter( 'woocommerce_add_to_cart_validation', 'sweb_empty_cart_before_add_to_cart', 10, 3 );
function sweb_empty_cart_before_add_to_cart($passed, $product_id, $quantity ) {
WC()->cart->empty_cart();
return $passed;
}
Alteori vrem să procesăm datele și elementele din coș și să adăugăm / eliminăm produse după nevoile proiectului.
În acest caz vom manipula coșul după adăugarea în coș a produsului. În acest scop ne vom folosi de hookul de acțiune ‘woocommerce_add_to_cart‘.
add_action('woocommerce_add_to_cart', 'sweb_add_to_remove_from_cart', 10, 2);
function sweb_add_to_remove_from_cart($cart_id, $product_id){
//verific daca am produse in cos
if (sizeof(WC()->cart->get_cart()) > 0) {
//parcurg elementele din cos
foreach (WC()->cart->get_cart() as $cart_item_key => $item) {
// Daca produsele din cos sunt diferite de noul produs adaugat le sterg
if ($product_id != $item['data']->get_id()) {
//elimin produsele din cos diferite de produsul nou adaugat in cos
WC()->cart->remove_cart_item($cart_item_key);
} else {
/*pentru produsul adaugat in cos setez cantitatea 1
(poate fi preexistent in cos la noua adaugare in cos)*/
WC()->cart->set_quantity($cart_item_key, 1, true); //$refresh_totals = true
}
}
/*acum avem un singur produs în coș (ultimul adăugat)
fie un produs cu un id bine determinat $new_product_id=12402*/
$product_cart_id = WC()->cart->generate_cart_id($new_product_id);
$cart_item_key_p = WC()->cart->find_product_in_cart($product_cart_id);
//nu mai avem nici un produs in afara de cel adaugat ultima data,
//dar las aceasta supraverificare
if ($cart_item_key_p) {
WC()->cart->set_quantity($cart_item_key_p, 1, true); //setez cantitatea pe 1
} else {
/*eliminam functia din stiva hook-ului woocommerce_add_to_cart astfel incat
la urmatoarea comanda de adaugare artificiala a produsului $new_product_id
sa nu intram in bucla si functia curenta sa se executa iarasi...si iarasi...cu consecințe
care se pot ușor deduce*/
remove_action('woocommerce_add_to_cart', 'sweb_add_to_remove_from_cart', 10, 2);
//adaug produsul $new_product_id în coș;
WC()->cart->add_to_cart($new_product_id);
/*inserez iarăși funcția curentă sweb_add_to_remove_from_cart în stiva de execuție
a hook-ului de acțiune woocommerce_add_to_cart pentru acțiuni ale utilizatorilor de
adăugare în coș ulterioare*/
add_action('woocommerce_add_to_cart', 'sweb_add_to_remove_from_cart', 10, 2);
}
}
Se vede deci cum in Woocommerce se poate manipula coșul având la dispoziție infrastructura de dezvoltare asigurată de creatorii pluginului.
Există și o documentație bine pusă la punct referitoare la hook-uri aici: Documentație Woocommerce – Hook-uri.
De asemenea, întreaga infrastructură de dezvoltare web a pluginului Woocommerce este documentată aici: Documentație Plugin Woocommerce.
Un site WordPress dezvoltat custom pe baza pluginului Woocommerce și a temei LearnPress în care Sector web a aplicat acest tip de manipulare a coșului virtual de produse la adăugarea unui anumit tip de produs, este roexam.com. Roexam este un site de înscriere la examenele de limba romană pentru studenții străini din cadrul universității Babeș-Bolyai din Cluj.
Pentru proiectele voastre custom de anvergură, fie pe platforme cunoscute, ca WordPress, fie dedicate, sau complet custom, vă invităm să luați legătura cu noi prin intermedul numerelor de telefon afișate pe site-ul nostru sau prin intermediul formularului de contact din pagina de contact. Vă așteptăm!
Află detalii privind realizarea site-urilor pe WordPress
Creare site WordPress
Sau ia legatura cu noi aici