logo vandaal 88x50 1

Někdy může být nežádoucí, aby se u variabilních produktů zobrazovala cen například "5.000 - 10.000", dokud si zákazník nevybere nějakou variantu s konkrétní cenou.

Chcete-li tedy zobrazovat cenu estetičtěji, můžete využít snippet níže, který vložíte do souboru functions.php své šablony. Díky němu se zobrazí cena ve tvaru "Od: 5.000".

SNIPPET CENA STARE SNIPPET CENA OD NOVE

Pro některé zákazníky je těžké pochopit, že jako variabilní symbol při platbě bankovním převodem mají použít číslo objednávky, a to i přesto, že na děkovné stránce či emailu jim to jasně WooCommerce napíše. Tak si trošku pomůžeme a přidáme jasné označení Variabilní symbol jak na děkovnou stránku, tak do emailu, snippetem vloženým do functions.php.

Pokud chcete z nějakého důvodu zrušit otravný výpočet dopravy v košíku, stačí použít tento snipet, který vložíte do functions.php své šablony.

 

Chcete informovat zákazníka o tom, za kolik má ještě nakoupit, aby měl dopravu zdarma? Tento snippet zobrazí hlášení, za kolik má ještě zákazník nakoupit, aby měl dopravu zdarma. Jen upozorním, že tento jednoduchý snippet není vhodný pro více dopravních zón či měn. Na to už doporučuji použít regulérní placené pluginy.

 

Nabízíte dopravu zdarma od určité částky, třeba od výše objednávky v hodnotě 1.000 Kč? A co tak u produktů, které jsou dražší než uvedená částka zobrazit štítek "Doprava zdarma"?

Stačí na to malý snippet vložený do functions.php vaší šablony. Text se vloží jak na výpis produktů, tak do samotného produktu. Pozici si můžete upravit sami.

Máte produkty, u kterých chcete omezit způsob platby? Například prodáváte matrace a nabízíte i matrace na míru, ale právě u těchto vyžadujete platbu předem? Pak by se vám mohl hodit tento snippet, který stačí vložit do functions.php vašeho designu. V mém případě jsem chtěl, aby pokud je v košíku produkt z kategorie 121 byla možnost platit pouze předem, bez ohledu na jiné produkty v košíku. Pokud by se v košíku nenacházel produkt z kategorie 121, lze použít všechny aktivní platby:

Znáte to, zákazník si objedná na dobírku, zásilku nepřevezme, Vám se zásilka vrátí a peníze za odeslání jsou fuč.

Nabízí se jedno řešení. Dovolit platbu na dobírku pouze určitým zákazníkům. Ukážeme si, jak umožnit dobírku pouze uživatelům, kteří uskutečnili alespoň jeden úspěšný nákup s platbou předem. Znamená to tedy, že pokud u Vás nakupuje někdo poprvé, bude mít k dispozici pouze platbu předem bankovním převodem, až ji uhradí a vy ji nastavíte jako dokončenou, tak bude automaticky přesunut do skupiny uživatelů member, a této skupině již dovolíme zobrazení možnosti platby na dobírku.

Jak vyřešit první úkol, tedy automatický přesun uživatelů s dokončenou objednávkou do skupiny member, jsem psal v článku Automatická změna uživatelské role po prvním nákupu.

Pokud již tedy máme toto vyřešeno, přejdeme k druhému úkolu, a to, že povolíme dobírku pouze pro uživatele s rolí member. Provedeme to přidáním kousku kódu do functions.php Vašeho theme:

Nyní se dobírka bude zobrazovat uživatelům s rolí member, do které jsme je přesunuli pomocí automatické změny role po první úspěšné objednávce.

 

Potřebujete návštěvníkům stránek zobrazit jiný text než registrovaným a přihlášeným uživatelům? Stačí na to jednoduchý snippet, který vložíme do functions.php a získáte tím jednoduché shortcody.

Pak již stačí použít shortcode [UZIVATEL] text [/UZIVATEL] pro zobrazení textu jen přihlášeným uživatelům (v opačném případě se zobrazí text "Pro zobrazení se musíte přihlásit" - text si upravte dle potřeby), nebo [ HOST ] text [/HOST ] (musel jsem vložit mezery, aby se to tu zobrazilo, vy je smažte) pro zobrazení textu návštěvníkům, tedy nepřihlášeným uživatelům. Jak vidíte, klidně si můžete nastavit vlastní název shorcodu.

Máte třeba produkty, které mohou nakupovat jen členové klubu, ale nechcete platit drahé pluginy? Můžete použít tuto funkci, která poté, co zákazník uskuteční první nákup a vy jeho objednávku označíte jako dokončenou, automaticky přesune zákazníka do jiné uživatelské role, v tomto případě "member". Vše se děje automaticky a nemusíte nic nastavovat ručně. Pak už vám stačí použít nějaký plugin, pomocí kterého dovolíte nákup produktu jen určitým rolím. Opět použijeme ve functions.php. Mimochodem, tuto funkci využívají mí klienti i pro zamezení nováčkům nakoupit na dobírku. Dobírku jim povolují tímto až po první úspěšné objednávce.

Standardně obsahuje registrační formulář do WooCommerce pouze uživatelské jméno, email a heslo. Protože však jde o registraci do internetového obchodu, bylo by ideální, aby formulář obsahoval všechna potřebná pole k uskutečnění objednávky, jako je například adresa a telefon. Výhody při získání těchto informací při registraci je například to, že již po zaregistrování můžete cíli propagaci výrobků, nakupující již v košíku může vidět správnou cenu dopravy, kterou by se jinak dozvěděl až při vyplnění v pokladně.

Pojďme si tedy registrační formulář upravit. Vše se bude dít pomocí snipetu umístěného do souboru functions.php Vašeho designu.

Pole, která můžeme přidat a jsou navázána na účet WooCommerce, jsou tato:

  • billing_first_name
  • billing_last_name
  • billing_company
  • billing_address_1
  • billing_address_2
  • billing_city
  • billing_postcode
  • billing_country
  • billing_state
  • billing_email
  • billing_phone

Přidáme si tedy upravený registrační formulář, ve kterém přibude Jméno, Příjmení, Adresa, Město a PSČ, pomocí snippetu:


// úprava registračního formuláře
function wooc_extra_register_fields() {
?>
       
       

       <label for="reg_billing_first_name"><?php _e( 'First name', 'woocommerce' ); ?><span class="required">*</span></label>
       <input type="text" class="input-text" name="billing_first_name" id="reg_billing_first_name" value="<?php if ( ! empty( $_POST['billing_first_name'] ) ) esc_attr_e( $_POST['billing_first_name'] ); ?>" />
       

       

       <label for="reg_billing_last_name"><?php _e( 'Last name', 'woocommerce' ); ?><span class="required">*</span></label>
       <input type="text" class="input-text" name="billing_last_name" id="reg_billing_last_name" value="<?php if ( ! empty( $_POST['billing_last_name'] ) ) esc_attr_e( $_POST['billing_last_name'] ); ?>" />
       

       
<div class="clear"></div>

       

       <label for="reg_billing_phone"><?php _e( 'Phone', 'woocommerce' ); ?><span class="required">*</span></label>
       <input type="text" class="input-text" name="billing_phone" id="reg_billing_phone" value="<?php if ( ! empty( $_POST['billing_phone'] ) ) esc_attr_e( $_POST['billing_phone'] ); ?>" />
       

       

       <label for="reg_billing_address_1"><?php _e( 'Address', 'woocommerce' ); ?><span class="required">*</span></label>
       <input type="text" class="input-text" name="billing_address_1" id="reg_billing_address_1" value="<?php if ( ! empty( $_POST['billing_address_1'] ) ) esc_attr_e( $_POST['billing_address_1'] ); ?>" />
       

  
       

       <label for="reg_billing_city"><?php _e( 'City', 'woocommerce' ); ?><span class="required">*</span></label>
       <input type="text" class="input-text" name="billing_city" id="reg_billing_city" value="<?php if ( ! empty( $_POST['billing_city'] ) ) esc_attr_e( $_POST['billing_city'] ); ?>" />
       

       

       <label for="reg_billing_postcode"><?php _e( 'ZIP', 'woocommerce' ); ?><span class="required">*</span></label>
       <input type="text" class="input-text" name="billing_postcode" id="reg_billing_postcode" value="<?php if ( ! empty( $_POST['billing_postcode'] ) ) esc_attr_e( $_POST['billing_postcode'] ); ?>" />
       

       
<div class="clear"></div>

            
       <?php
}
add_action( 'woocommerce_register_form_start', 'wooc_extra_register_fields' );

Když už máme upravený formulář, nastavíme si ověření vyplněných polí:

// kontrola údajů
function wooc_validate_extra_register_fields( $username, $email, $validation_errors ) {
       if ( isset( $_POST['billing_first_name'] ) && empty( $_POST['billing_first_name'] ) ) {
              $validation_errors->add( 'billing_first_name_error', __( 'Jméno je povinná položka!', 'woocommerce' ) );
       }
       if ( isset( $_POST['billing_last_name'] ) && empty( $_POST['billing_last_name'] ) ) {
              $validation_errors->add( 'billing_last_name_error', __( 'Příjmení je povinná položka!.', 'woocommerce' ) );
       }
       if ( isset( $_POST['billing_phone'] ) && empty( $_POST['billing_phone'] ) ) {
              $validation_errors->add( 'billing_phone_error', __( 'Telefon je povinná položka!.', 'woocommerce' ) );
       }
       if ( isset( $_POST['billing_address_1'] ) && empty( $_POST['billing_address_1'] ) ) {
              $validation_errors->add( 'billing_address_1_error', __( 'Adresa je povinná položka!.', 'woocommerce' ) );
       }
       if ( isset( $_POST['billing_city'] ) && empty( $_POST['billing_city'] ) ) {
              $validation_errors->add( 'billing_city_error', __( 'Město je povinná položka!.', 'woocommerce' ) );
       }
       if ( isset( $_POST['billing_postcode'] ) && empty( $_POST['billing_postcode'] ) ) {
              $validation_errors->add( 'billing_postcode_error', __( 'PSČ je povinná položka!.', 'woocommerce' ) );
       }                     
}
add_action( 'woocommerce_register_post', 'wooc_validate_extra_register_fields', 10, 3 );

Pokud uživatel vyplnil všechny potřebné údaje, uložíme si je do databáze:

// uložení údajů zákazníka do databáze
function wooc_save_extra_register_fields( $customer_id ) {
       if ( isset( $_POST['billing_first_name'] ) ) {
              // WordPress default first name field.
              update_user_meta( $customer_id, 'first_name', sanitize_text_field( $_POST['billing_first_name'] ) );
              // WooCommerce billing first name.
              update_user_meta( $customer_id, 'billing_first_name', sanitize_text_field( $_POST['billing_first_name'] ) );
       }
       if ( isset( $_POST['billing_last_name'] ) ) {
              // aktualizujeme Jméno
              update_user_meta( $customer_id, 'last_name', sanitize_text_field( $_POST['billing_last_name'] ) );
              // aktualizujeme Příjmení
              update_user_meta( $customer_id, 'billing_last_name', sanitize_text_field( $_POST['billing_last_name'] ) );
       }
       if ( isset( $_POST['billing_phone'] ) ) {
              // aktualizujeme Telefon
              update_user_meta( $customer_id, 'billing_phone', sanitize_text_field( $_POST['billing_phone'] ) );
       }
       if ( isset( $_POST['billing_address_1'] ) ) {
              // aktualizujeme Adresu/ulici
              update_user_meta( $customer_id, 'billing_address_1', sanitize_text_field( $_POST['billing_address_1'] ) );
       }
       if ( isset( $_POST['billing_city'] ) ) {
              // aktualizujeme Město
              update_user_meta( $customer_id, 'billing_city', sanitize_text_field( $_POST['billing_city'] ) );
       }
       if ( isset( $_POST['billing_postcode'] ) ) {
              // aktualizujeme PSČ
              update_user_meta( $customer_id, 'billing_postcode', sanitize_text_field( $_POST['billing_postcode'] ) );
       }                     
}
add_action( 'woocommerce_created_customer', 'wooc_save_extra_register_fields' );

Výsledný registrační formulář bude vypadat takto:

Hledáte správce svého webu?

Neváhejte mne kontaktovat a dohodnout spolupráci. Rád se postarám o váš web či shop, ať už jde o aktualizace systému, jeho úpravy či udržování aktuálního obsahu.
KONTAKT
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram