WooCommerce – úprava polí v pokladně
Úprava polí v pokladně WooCommerce, nebo obecně přizpůsobení pokladny tak, aby byla pro zákazníky přehlednější, je jedním z nejčastějších požadavků klientů.
Pokladna ve WooCommerce se dá upravit téměr libovolně, může být jednokroková nebo vícekroková, mít různě upravená / přesouvaná pole atd., viz. několik screenshotů níže.
Pro customizaci polí je dostupná dokumentace, která pomůže se základní orientací, ale neřeší některé detaily, jako je např. pořadí polí v pokladně.
U webu paleosnadno.cz znělo zadání:
Pokud jsou v košíku pouze virtuální produkty, potřebujeme, aby se v pokladně zobrazovaly jen nezbytně nutná pole. Pokud jsou v košíku i fyzické produkty, potřebujeme zobrazit více polí. Chceme také přesunout firemní údaje do samostatné sekce, která se zobrazí po kliknutí na checkbox.
Potřebné jsou především dva filtry:
woocommerce_checkout_fields
filtr, který umožňuje měnit parametry polí v checkoutu (např. label, třídy atd.) a přidávat / odebírat pole
woocommerce_default_address_fields
filtr, který je potřeba, pokud chcete upravovat parametry některých výchozích polí, především „město“, „ulice“, „psč“
Na kompletní kód, který takovou funkcionalitu zařídí, se můžete podívat níže, a dozvíte se z něj, jak přidat polím třídy, změnit jejich pořadí, vytvořit nové pole i jak zařídit, aby se pole s detaily firmy zobrazily až po kliknutí na checkbox.
Výsledek si samozřejmě můžete také vyzkoušet sami na webu paleosnadno.cz.
/** * Edit checkout fields */ add_filter( 'woocommerce_checkout_fields' , 'paleo_override_checkout_fields',999,1 ); function paleo_override_checkout_fields( $fields ) { // Remove some checkout fields unset($fields['billing']['billing_address_2']); unset($fields['shipping']['shipping_address_2']); // Adjust billing fields $fields['billing']['billing_first_name']['class'] = ['form-row-wide']; $fields['billing']['billing_last_name']['class'] = ['form-row-wide']; $fields['billing']['billing_city']['class'] = ['form-row-first']; $fields['billing']['billing_postcode']['class'] = ['form-row-last']; $fields['billing']['billing_email']['priority'] = 21; $fields['billing']['billing_phone']['priority'] = 22; $fields['billing']['billing_company']['priority'] = 92; $fields['billing']['billing_ic']['priority'] = 93; $fields['billing']['billing_dic']['priority'] = 94; // Adjust shipping fields $fields['shipping']['shipping_first_name']['class'] = ['form-row-wide']; $fields['shipping']['shipping_last_name']['class'] = ['form-row-wide']; $fields['shipping']['shipping_city']['class'] = ['form-row-first']; $fields['shipping']['shipping_postcode']['class'] = ['form-row-last']; $fields['billing']['billing_company']['class'] = ['form-row-wide company-details']; $fields['billing']['billing_ic']['class'] = ['form-row-first company-details']; $fields['billing']['billing_dic']['class'] = ['form-row-last company-details']; $fields['billing']['billing_dic']['clear'] = true; // Add custom checkbox for company details $fields['billing']['company_details_trigger'] = array( 'type' => 'checkbox', 'label' => __('Chci zadat firemní údaje', 'woocommerce'), 'class' => array('form-row-wide'), 'clear' => true, 'priority' => 91 ); // Remove checkout fields if there are only virtual products in cart if (paleo_only_virtual_in_cart()) { unset($fields['billing']['billing_phone']); $fields['billing']['billing_address_1']['class'] = ['form-row-wide company-details']; $fields['billing']['billing_city']['class'] = ['form-row-first company-details']; $fields['billing']['billing_postcode']['class'] = ['form-row-last company-details']; $fields['billing']['company_details_trigger']['label'] = 'Chci zadat firemní údaje na fakturu'; } return $fields; } /** * Remove checkout fields if there are virtual only products in cart */ add_filter( 'woocommerce_default_address_fields', 'custom_default_address_fields', 20, 1 ); function custom_default_address_fields( $fields ) { if (paleo_only_virtual_in_cart()) { $fields['address_1']['priority'] = 95; $fields['city']['priority'] = 96; $fields['postcode']['priority'] = 97; $fields['address_1']['required'] = false; $fields['city']['required'] = false; $fields['postcode']['required'] = false; } return $fields; } /** * Check if there are only virtual products in cart * @return bool */ function paleo_only_virtual_in_cart() { global $woocommerce; $items = $woocommerce->cart->get_cart(); $virtual_only = true; foreach($items as $item => $values) { $_product = wc_get_product( $values['data']->get_id()); if (!$_product->is_virtual()) { $virtual_only = false; break; } } return $virtual_only; }
Václav Greif se programování pro Wordpress věnuje více než 10 let. Za tu dobu nasbíral mnoho zkušeností s tvorbou pluginů pro Wordpress, úpravou šablon a programováním komplexních funkcionalit. Věnuje se programování pro Wordpress a školení programátorů.