WooCommerce bez košíka

Chcete mať na stránke katalóg Vašich produktov bez možnosti zakúpenia? Tak toto je návod pre Vás.


Klient ma oslovil so zaujímavou požiadavkou, aby tlačítko „Pridať do košíka“ nevykonalo akciu fyzického pridania produktu do košíka ale naopak, aby používateľa presmerovalo na rezervačnú stránku.

Takto som postupoval:

Zmena tlačidla „Pridať do košíka“

Tlačidlo „Pridať do košíka“ nájdeme na viacerých stránkach. Zaujimajú nás konkrétne:

  • stránka kategórie (archive)
  • stránka samotného produktu (single)

V prvom prípade nechceme aby bol používateľ rovno presmerovaný na rezerváciu ale aby sa po kliknutí otvorila produktová stránka. (Toto viete možno nastaviť aj priamo vo Vašej téme).

Vyriešime to pridaním nasledovného filtra do súboru functions.php:

themes/your-theme/functions.php

add_filter( 'woocommerce_loop_add_to_cart_link', 'wer_replace_add_to_cart_button_in_loop', 10, 2 );

function wer_replace_add_to_cart_button_in_loop( $button, $product  ) {
    $button_text = __("View product", "woocommerce");
    $button = '<a class="button" href="' . $product->get_permalink() . '">' . $button_text . '</a>';
    return $button;
}

Ďalej potebujeme upraviť tlačidlo na produktovej stránke. Vyriešime to nasledovným kódom opäť pridaným do súboru functions.php:

themes/your-theme/functions.php

//Úprava textu tlačidla
add_filter( 'woocommerce_product_single_add_to_cart_text', 'wer_replace_add_to_cart_text', 10, 2 );

function wer_replace_add_to_cart_text( ) {
    return 'Rezervácia servisu';
}

//Úprava url tlačidla po stlačení
add_filter('woocommerce_add_to_cart_form_action','wer_replace_add_to_cart_url', 10, 2 );

function wer_replace_add_to_cart_url( ) {
    return get_permalink( get_page_by_path('rezervacia'));
}

Na prvý pohľad máme hotovo. Treba však ešte zmeniť jednu vec.

Skrytie notifikácii o pridaní produktu

Pri stlačení upraveného tlačidla – „Rezervácia“ sme presmerovaný na stránku rezervácie. Ak sa však vrátime naspäť do obchodu, všimneme si notifikáciu „Produkt „Výmena LCD Apple iPhone 8 (zlatý) – 179€“ bol pridaný do košíka.“.

Notifikácie sú generované prostredníctvom funkcie „woocommerce_output_all_notices“, ktorá sa nachádza tu: plugins/woocommerce/includes/wc-template-functions.php

Je na ňu naviazaných niekoľko akcii „actions“, ktoré zabezpečujú aby sa podobná notifikácia zobrazila na stránke kategórie, produktu, košíku či pokľadne.

Miesto toho aby sme túto funkciu prepísali priamo vo Woocommerce plugine (pri najbližšej aktualizácii by sme o zmenu mohli prísť), zmeníme príslušné akcie, aby odkazovali na nami definovanú funkciu.

themes/your-theme/functions.php

//Odstránime akcie
remove_action( 'woocommerce_shortcode_before_product_cat_loop', 'woocommerce_output_all_notices', 10 );
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_output_all_notices', 10 );
remove_action( 'woocommerce_before_single_product', 'woocommerce_output_all_notices', 10 );

//Pridáme akcie
add_action( 'woocommerce_shortcode_before_product_cat_loop', 'wer_woocommerce_output_all_notices', 10 );
add_action( 'woocommerce_before_shop_loop', 'wer_woocommerce_output_all_notices', 10 );
add_action( 'woocommerce_before_single_product', 'wer_woocommerce_output_all_notices', 10 );

//Vlastná definícia funkcie
function wer_woocommerce_output_all_notices() {
	// echo '<div class="woocommerce-notices-wrapper">';
	// wc_print_notices();
	// echo '</div>';
}

A teraž uz naozaj máme hotovo.

Bonus: Stránka rezervácie

Akonáhle vykonáme spomenuté úpravy, objaví sa nová otázka:

Ako zistíme, ktorý produkt bol rezervovaný?

Odpoveď je, že pri stlačení „Rezervácia“ sa odošle formulár obsahujúci ID daného produktu. Ten vieme následne prečítať a zobraziť tak základné produktové informácie.

//súbor rezervačného pluginu

if (isset($_POST["add-to-cart"])) {
	$product_title = get_the_title($_POST["add-to-cart"]); 
	$product_image = wp_get_attachment_url( get_post_thumbnail_id($_POST["add-to-cart"]), 'thumbnail' );
	$product_url = get_post_permalink($_POST["add-to-cart"]);
}

To je všetko. Ak chcete aj vy pomôcť s Vaším wordpressom, napíšte mi a pozrieme sa na to.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *