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.
[php]
/**
* 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;
}
[/php]
Václav Greif se programování pro Wordpress věnuje více než 16 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ů.