Úprava textu tlačidla vo WooCommerce podľa toho, či je produkt už v košíku

Obtiažnosť:
Začiatočník
Pokročilý
Skúsený
Expert

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.

5 2 votes
Hodnotenie článku
Autor
Navigácia
Odoberať
Upozorniť na
guest
0 Komentáre
Inline Feedbacks
View all comments