Řekněme, že máme v e-shopu vytvořené tři “flat” dopravy:
- Zásilkovna – Výdejní místa. Tato doprava má ID “flat_rate:2”.
- DPD – Výdejní místa. Tato doprava má ID “flat_rate:5”.
- PPL – Výdejní místa. Tato doprava má ID “flat_rate:6”.
Do pokladny k jednotlivým dopravám přidáme button a vlastním scriptem otevřeme po-pup pro výběr výdejního místa daného přepravce.
Pro další zpracování potřebujeme ID výdejního místa. Script nám ho uloží do skrytého pole. Ta máme pojmenována takto:
- ‘packetaCZAddressID’ pro zásilkovnu
- ‘dpdCZAddressID’ pro DPD
- ‘pplCZAddressID’ pro PPL
Jak ale zajistit, že zákazník nezapomene zvolit výdejní místo? Provedeme validaci, zda skryté pole není prázdné.
add_action( 'woocommerce_after_checkout_validation', 'rip_validate_shipping_adress_id', 10, 2 ); function rip_validate_shipping_adress_id( $fields, $errors ){ if( ( $fields[ 'shipping_method' ][0] == 'flat_rate:2' ) and ( $fields[ 'packetaCZAddressID' ] == '' ) ) { $errors->add( 'validation', 'Nevybrali jste výdejní místo Zásilkovny.' ); } if( ( $fields[ 'shipping_method' ][0] == 'flat_rate:5' ) and ( $fields[ 'dpdCZAddressID' ] == '' ) ) { $errors->add( 'validation', 'Nevybrali jste výdejní místo DPD.' ); } if( ( $fields[ 'shipping_method' ][0] == 'flat_rate:6' ) and ( $fields[ 'pplCZAddressID' ] == '' ) ) { $errors->add( 'validation', 'Nevybrali jste výdejní místo PPL.' ); } }
Podmínka otestuje, zda je vybraná příslušná doprava a zároveň, zda je vyplněné skryté pole s ID výdejního místa. Pokud ID není vyplněné, zobrazí v pokladně klasickou chybovou hlášku.