Acasă » Blog » Woocommerce. Adăugarea sau eliminarea programată de produse din coșul virtual

Woocommerce. Adăugarea sau eliminarea programată de produse din coșul virtual

Share this post on social!
Optimizare site Woocommerce pentru Google

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!

Lasă un răspuns

Traian Constantin Predan

Traian Constantin Predan

Inginer absolvent al Politehnicii București proiectează și construiește sisteme online. Lucrează proiecte extrem de diverse, îi plac viziunile noi care provoacă la dezvoltarea unor soluții tehnice eficiente și stabile.