Po pridaní produktu do košíka, štandardne zákazník nevidí, či je produkt už v košíku alebo nie. Jedinou možnosťou je overiť si to priamo v košíku alebo, v prípade, že stránka disponuje minikošíkom, môže si to zistiť tam. Ukážeme si jeden zo spôsobov, ako dať zákazníkovi vedieť, že produkt už je v košíku pre archívy produktov a aj pre stránku produktu.
# Stránka Shop + archívne stránky produktov
/** * Úprava textu tlačidla "Pridať do košíka" vo WooCommerce podľa toho, či je produkt už v košíku - Archívne stránky * * @author PeterB aka Viking * @url https://wp-admin.sk/woocommerce/uprava-textu-tlacidla-vo-woocommerce-podla-toho-ci-je-produkt-uz-v-kosiku/#shop-page * * @param $text | string * @param $product | WC_Product * * @return string */ function viking_archive_button_text( $text, $product ) { // získanie globálnej premennej $woocommerce global $woocommerce; // Prechádzanie položkami v košíku foreach( $woocommerce->cart->get_cart() as $cart_item_key => $values ) { // Získanie objektu produktu pre položku v košíku $cart_product = $values['data']; // Porovnanie ID aktuálneho produktu s ID produktu v košíku if( $product->get_id() == $cart_product->get_id() ) { // Ak sa produkt nachádza v košíku, zmeňte text tlačidla return __( 'Produkt v košíku', 'woocommerce' ); } } // Ak sa produkt nenachádza v košíku, ponechajte pôvodný text tlačidla return $text; } add_filter( 'woocommerce_product_add_to_cart_text', 'viking_archive_button_text', 10, 2 );
Pre zmenu textu v tlačidle, sme použili filter woocommerce_product_add_to_cart_text
. Tento filter nám rovno ponúka $text
čo je pôvodný text a $product
, čo je aktuálny objekt produktu. Z globálnej premennej $woocommerce
sme získali obsah košíka a pomocou php funkcie foreach
skontrolujeme jednotlivé produkty voči aktuálnemu produktu. V prípade, že sa ID
produktov zhodujú, vrátili sme nový text s informáciou, že produkt je v košíku. Ak sa zhoda nenašla, vrátili sme pôvodný text.
Táto funkcia je rozšírenie funkcie z článku Zmena textu tlačidla na stránke obchodu.
# Stránka produktu
/** * Úprava textu tlačidla "Pridať do košíka" vo WooCommerce podľa toho, či je produkt už v košíku - Stránka produktu * * @author PeterB aka Viking * @url https://wp-admin.sk/woocommerce/uprava-textu-tlacidla-vo-woocommerce-podla-toho-ci-je-produkt-uz-v-kosiku/#single-pproduct * * @param $text | string * @param $product | WC_Product * * @return string */ function viking_single_button_text( $text, $product ) { // získanie globálnej premennej $woocommerce global $woocommerce; // Preverenie všetkých produktov v košíku foreach( $woocommerce->cart->get_cart() as $cart_item_key => $values ) { // Získanie objektu produktu pre položku v košíku $cart_product = $values['data']; // Porovnanie ID aktuálneho produktu s ID produktu v košíku if( $product->get_id() == $cart_product->get_id() ) { // Ak sa produkt nachádza v košíku, zmeňte text tlačidla return __( 'Produkt v košíku - Pridať znova?', 'woocommerce' ); } } // Ak sa produkt nenachádza v košíku, ponechaj pôvodný text tlačidla return $text; } add_filter( 'woocommerce_product_single_add_to_cart_text', 'viking_single_button_text', 10, 2 );
Podobne, ako v predchádzajúcom príklade, sme použili filter woocommerce_product_add_to_cart_text
. Je to úplne rovnaký filter, lenže tento je pre stránku produktu. Tento filter taktiež ponúka $text
čo je pôvodný text a $product
, čo je aktuálny objekt produktu. Z globálnej premennej $woocommerce
sme získali obsah košíka a pomocou php funkcie foreach
skontrolujeme jednotlivé produkty voči aktuálnemu produktu. V prípade, že sa ID
produktov zhodujú, vrátili sme nový text s informáciou, že produkt je v košíku. Ak sa zhoda nenašla, vrátili sme pôvodný text.
Toto riešenie je určené pre jednoduchý produkt a pri variabilnom produkte nebude fungovať. To však neznamená, že sa nedá rozšíriť aj na variabilný produkt. Ak máte záujem o rozšírenie, môžete si to prispôsobiť, alebo mi dajte vedieť v komentári.
Tento snippet môžte umiestniť do functions.php vašej aktuálnej témy, ale vhodnejšie je si na to vytvoriť vlastný plugin. Viac o vytvorení pluginu, nájdete TU.