Checkout Formfields

Modify the customer form fields available on the checkout page

A few examples as to how you can show/hide/add/modify input formfields available on the checkout page

Simple show/hide formfields using css selectors

If you wish to simply show hide some formfields when an order is set to be a pickup order.
See here , for options as to where to add this css

example:

/**********************************************************
	target specific elements on pickup
	use your browsers element inspector to ascertain the exact classname you need to target
**********************************************************/
.wppizza-order-ispickup .wppizza-personal-details > .wppizza-cname{display:none}
.wppizza-order-ispickup .wppizza-personal-details > .wppizza-caddress{display:none}
/* etc etc */

Make sure to not hide things that you have also set to be “required” (unless they are already prefilled in some way) or the customer will never be able to check out …

wppizza_register_formfields

Add / modify a formfield on the checkout page. First of all, you can of course already add/remove and conditionally set various formfield properties by going to WPPizza ->Order Form. If you however need some more granular control or simply add your own, see the examples below

.

example:

/*************************************************** 
	add the filter and corresponding function
****************************************************/
add_filter('wppizza_register_formfields', 'my_prefix_modify_wppizza_formfields');
function my_prefix_modify_wppizza_formfields($formfields){

	/* 
		*unique* identifier for the formfield you want to add
		if you add more than one, each one must be a unique id
		for simplicity and demonstration purposes the some is being used here for all !

		if you wish ta alter an already existing formfield use that formfields key instead 
		a print_r($formfields) will show you all registered formfields and their keys if you need to identify a particular one 

	*/
	$unique_ident = 'my_unique_formfield_id';


	/*********************************************** 
		adding a text formfield 
	***********************************************/
	$formfields[$unique_ident ] = array(
	
		/* sort order - at which position is this field displayed */
		'sort' => 100,

		/* the unique ident  */
		'key' => $unique_ident ,

		/* label displayed for the formfield */
		'lbl' => 'some label',

		/* should be defined as an array, with the first value being false  */
		'value' => array(false),

		/* set to text to display a text input */
		'type' => 'text',

		/* true to enable (pointless to set this to false)*/
		'enabled' => true,

		/* true to make the field required on delivery, false otherwise */
		'required' => true,

		/* true to make the field required on pickup, false otherwise */
		'required_on_pickup' => true,

		/* true to prefill with a value if it is known (will only ever do anything with 'onregister' being true as well) */
		'prefill' => false,

		/* true to make field part of the user registration values */
		'onregister' => false,

		/* true to add the value entered to the email subject  */
		'add_to_subject_line' => false,

		/* input placeholder  */
		'placeholder' => 'my placeholder',

		/* validation as available wppizza->order form. as there can be multiple validation rules, this should be an array*/
		'validation' => array(
			'default' => true,
		),			
	);


	/*********************************************** 
		adding a select dropdown
	***********************************************/
	$formfields[$unique_ident ] = array(
	
		/* sort order - at which position is this field displayed */
		'sort' => 100,

		/* the unique ident  */
		'key' => $unique_ident ,

		/* label displayed for the formfield */
		'lbl' => 'some label',

		/* an array of available dropdown values*/
		'value' => array('1st value','2nd value','3rd value','Nth value'),

		/* set to select to display a select dropdown*/
		'type' => 'select ',

		/* true to enable (pointless to set this to false)*/
		'enabled' => true,

		/* true to make the field required on delivery, false otherwise */
		'required' => true,

		/* true to make the field required on pickup, false otherwise */
		'required_on_pickup' => true,

		/* true to prefill with a value if it is known (will only ever do anything with 'onregister' being true as well) */
		'prefill' => false,

		/* true to make field part of the user registration values */
		'onregister' => false,

		/* true to add the value entered to the email subject  */
		'add_to_subject_line' => false,

		/* placeholder - used as initial, non-selected value  or bool false / empty */
		'placeholder' => '--please select--',

		/* validation as available wppizza->order form. as there can be multiple validation rules, this should be an array, 
		however as this is a select field , the rules as set below are really the only sensible setting here
		*/
		'validation' => array(
			'default' => true,
		),			
	);


	/*********************************************** 
		adding radio inputs 
	***********************************************/
	$formfields[$unique_ident ] = array(
	
		/* sort order - at which position is this field displayed */
		'sort' => 100,

		/* the unique ident  */
		'key' => $unique_ident ,

		/* label displayed for the formfield */
		'lbl' => 'some label',

		/* an array of available radio values*/
		'value' => array('1st value','2nd value','3rd value','Nth value'),

		/* set to select to display radio choices */
		'type' => 'radio',

		/* true to enable (pointless to set this to false)*/
		'enabled' => true,

		/* true to make the field required on delivery, false otherwise  */
		'required' => true,

		/* true to make the field required on pickup, false otherwise */
		'required_on_pickup' => true,

		/* true to prefill with a value if it is known (will only ever do anything with 'onregister' being true as well) */
		'prefill' => false,

		/* true to make field part of the user registration values */
		'onregister' => false,

		/* true to add the value entered to the email subject  */
		'add_to_subject_line' => false,

		/* ignored for radios  */
		'placeholder' => false,

		/* validation as available wppizza->order form. as there can be multiple validation rules, this should be an array, 
		however as these are radio inputs, the rules as set below are really the only sensible setting here
		*/
		'validation' => array(
			'default' => true,
		),			
	);


	/*********************************************** 
		adding a checkbox
	***********************************************/
	$formfields[$unique_ident ] = array(
	
		/* sort order - at which position is this field displayed */
		'sort' => 100,

		/* the unique ident  */
		'key' => $unique_ident ,

		/* label displayed for the checkbox */
		'lbl' => 'some label',

		/* ignored, but should be set to avoid php notices*/
		'value' => array(false),

		/* set to select to display multiple checkbox choices */
		'type' => 'checkbox',

		/* true to enable (pointless to set this to false)*/
		'enabled' => true,

		/* true to make the field required on delivery, false otherwise  */
		'required' => true,

		/* true to make the field required on pickup, false otherwise */
		'required_on_pickup' => true,

		/* true to prefill with a value if it is known (will only ever do anything with 'onregister' being true as well) */
		'prefill' => false,

		/* true to make field part of the user registration values */
		'onregister' => false,

		/* true to add the value entered to the email subject  */
		'add_to_subject_line' => false,

		/* ignored for checkboxes*/
		'placeholder' => false,

		/* validation as available wppizza->order form. as there can be multiple validation rules, this should be an array, 
		however as these are radio inputs, the rules as set below are really the only sensible setting here
		*/
		'validation' => array(
			'default' => true,
		),			
	);

	/*********************************************** 
		adding multiple checkbox choices
	***********************************************/
	$formfields[$unique_ident ] = array(
	
		/* sort order - at which position is this field displayed */
		'sort' => 100,

		/* the unique ident  */
		'key' => $unique_ident ,

		/* label  */
		'lbl' => 'some label',

		/* an array of checkboxes */
		'value' => array('1st value','2nd value','3rd value','Nth value'),

		/* set to select to display multiple checkbox choices */
		'type' => 'multicheckbox',

		/* true to enable (pointless to set this to false)*/
		'enabled' => true,

		/* true to make the field required on delivery, false otherwise  */
		'required' => true,

		/* true to make the field required on pickup, false otherwise */
		'required_on_pickup' => true,

		/* true to prefill with a value if it is known (will only ever do anything with 'onregister' being true as well) */
		'prefill' => false,

		/* true to make field part of the user registration values */
		'onregister' => false,

		/* true to add the value entered to the email subject  */
		'add_to_subject_line' => false,

		/* ignored for checkboxes*/
		'placeholder' => false,

		/* validation as available wppizza->order form. as there can be multiple validation rules, this should be an array, 
		however as these are radio inputs, the rules as set below are really the only sensible setting here
		*/
		'validation' => array(
			'default' => true,
		),			
	);

	/*********************************************** 
		adding a hidden formfield 
	***********************************************/
	$formfields[$unique_ident ] = array(
	
		/* sort order - at which position is this field displayed */
		'sort' => 100,

		/* the unique ident  */
		'key' => $unique_ident ,

		/* ignored for hidden fields */
		'lbl' => false,

		/* should be defined as an array, with the first value being false  */
		'value' => array(false),

		/* set to hidden to display a hidden input */
		'type' => 'hidden',

		/* true to enable (pointless to set this to false)*/
		'enabled' => true,

		/* true to make the field required on delivery, false otherwise . 
		Warning: if you set this to true, without prefilling it (see below) the customer will never be able to order when delivery is selected !
		*/
		'required' => true,

		/* true to make the field required on pickup, false otherwise . 
		Warning: if you set this to true, without prefilling it (see below) the customer will never be able to order when pickup is selected !
		*/
		'required_on_pickup' => true,

		/* true to prefill with a value if it is known (will only ever do anything with 'onregister' being true as well) */
		'prefill' => false,

		/* true to make field part of the user registration values */
		'onregister' => false,

		/* true to add the value entered to the email subject  */
		'add_to_subject_line' => false,

		/* ignored for hidden fields  */
		'placeholder' => false ,

		/* validation as available wppizza->order form. as there can be multiple validation rules, this should be an array, 
		however as this is a hidden inputs, the rules as set below are really the only sensible setting here
		*/
		'validation' => array(
			'default' => true,
		),			
	);




	/*********************************************** 
		removing a formfield 
		simply unset , or disable
	***********************************************/
	unset($formfields[$unique_ident]); //unset
	$formfields[$unique_ident]['enabled'] = false ; //disable


	/*********************************************** 
		if you want to disable/not show
		a field when pickup is selected
	***********************************************/
	if(wppizza_is_pickup()){//simply use !wppizza_is_pickup() for the reverse
		unset($formfields[$unique_ident]); //unset
		$formfields[$unique_ident]['enabled'] = false ; //disable
	}



return $formfields;
}

For additional conditionals that might be useful (‘cart is empty’ and similar), also see here

Pre-filling form fields

If a formfield is set to have ‘onregister’ and ‘prefill’ set to true, the relevant value will be prefilled/selected when a user logs in, if you want to or need to (especially with hidden fields) always pre-set a specific value I’d suggest something like the below

example:

add_action('init', 'myprefix_prefill_formfields');
function myprefix_prefill_formfields(){

	/*
	prefill a value if it has not ever been set
	*unique* identifier for the formfield you want to prefill 
	*/
	$unique_ident = 'my_unique_formfield_id';

	if(!isset($_SESSION[WPPIZZA_SLUG.'_userdata'][$unique_ident])){
		
		/* text / hidden formfields */
		$_SESSION[WPPIZZA_SLUG.'_userdata'][$unique_ident] = 'some input value';
		
		/* radios - one of the values as defined in 'value' array of the registered formfield*/
		$_SESSION[WPPIZZA_SLUG.'_userdata'][$unique_ident] = '2nd value';

		/* checkbox (single) - boolean */
		$_SESSION[WPPIZZA_SLUG.'_userdata'][$unique_ident] = true; //bool

		/* checkbox (multiple)  - one or more of the values as defined in 'value' array ofthe  registered formfield*/
		$_SESSION[WPPIZZA_SLUG.'_userdata'][$unique_ident] = array('1st value','3rd value') ; //array
	}
	
return;
}