Gravity Forms Datepicker: beperk datumkeuze

Beperk datumkeuze in datepicker

een tip voor WordPress plug-in Gravity Forms

Restrict dates in Gravity Forms date-pickerWat zou het toch handig zijn als Gravity Forms het makkelijk maakte om de datumkeuze in de datepicker te beperken. Behalve als het om bijv. een geboortedatum gaat, heeft het vaak geen zin om 100 jaar terug in de tijd te kunnen.
Sommige plugins beloven dat je in de administratie van het formulier makkelijk de datum kunt beperken, maar met deze plugin kun je alleen maar vaste data invoeren.

Onbruikbaar als je de datum wil beperken tot bijvoorbeeld vandaag en 1 jaar vooruit.

Je kunt een simpele jQuery code toevoegen aan de pagina, zoals deze:

jQuery(document).ready(function($) {
    $(".datepicker").datepicker({ minDate: 0 });
});

Oops, maar je bent nu wel de kalender-icon kwijt! Die moet je dus nog eens extra weer toevoegen, bijvoorbeeld met onderstaande code (controleer of het pad naar dat icon correct is!):

jQuery(document).ready(function($) {
		$( "#input_6_3-0" ).datepicker({  buttonImage: 'images/calendar.gif', minDate: '+1d' });
  });

Een gemakkelijke oplossing

Maar zelfs met bovenstaande code gebeurt het dat de kalender-icon niet verschijnt. Ik heb niet kunnen uitvinden waardoor dat komt. Het enige wat er dan nog op zit is een core file van Gravity Forms aan te passen:
wp-content/plugins/gravityforms/js/datepicker.js

Dat klinkt ingrijpender dan het is. Sterker, het is doodeenvoudig, verander dit (op regel 9 en 10):

yearRange: '-100:+20',
showOn: 'focus',

naar dit:

yearRange: '0:+1',
minDate: '+1w',
maxDate: '+1y',
showOn: 'focus',

De code spreekt voor zichzelf: een gebruiker kan alleen het huidige of volgende jaar selecteren en alleen een datum die minstens 1 week en maximaal 1 jaar in de toekomst ligt.

Er zit natuurlijk een nadeel aan deze werkwijze, want het bestand wordt overschreven zodra je Gravity Forms update. Maar ik vind dit een zo gemakkelijke oplossing voor dit probleem, dat ik gewoon een notitie maak om bij een update dit kleine klusje (minder dan 1 minuut werk) opnieuw te doen.