Developers

  1. Modify Css / Styles / Layout
    1. Layout (Menu Items, General)
    2. Frontend Css
    3. Admin Css
  2. Templates
    1. Pages
      1. page.order.php
      2. page.confirm-order.php
      3. page.processing.php
      4. page.thankyou.php
      5. page.cancelled.php
      6. page.purchase-history.php
    2. Order
      1. itemised.php
      2. summary.php
      3. transaction_details.php
    3. Global
      1. orderinfo.php (Widget)
      2. openingtimes.php (Widget)
      3. additives.php (Widget)
      4. navigation.list.php (Widget)
      5. navigation.dropdown.php (Widget)
      6. search.php (Widget)
      7. totals.php (Widget)
      8. pickup_choice.php (Mixed)
      9. login.php (Module)
      10. profile.register.php (Module)
      11. profile.update.php (Module)
      12. pages.pickup_note.php (Module)
      13. formfields.inputs.php (Module)
      14. formfields.values.php (Module)
    4. Cart
      1. cart.container.php
      2. cart.shopclosed.php
      3. cart.empty.php
      4. cart.pickup_note.php
      5. cart.checkout_button.php
      6. cart.empty_cart_button.php
      7. cart.minimum_order.php
      8. minicart.php
    5. Loop (Menu Items)
      1. header.php
      2. no_results.php
      3. posts.title.php
      4. posts.thumbnail.php
      5. posts.prices.php
      6. posts.content.php
      7. posts.permalink.php
      8. additives.php
      9. pagination.php
      10. theme-wrapper.php
    6. Search Results
      1. search.php
    7. Single Menu Item
      1. single.php
    8. functions.php
  3. Filters, Actions, Functions
    1. Global WPPizza functions
    2. WPPizza options (Filter)
    3. Currency (Filter)
    4. After every order (Action)
    5. Getting orders (Function)
  4. Constants
    1. Admin Name
    2. Admin Menu Icon
    3. SORT_ITEMS_AS_ADDED
    4. SINGLE_PERMALINK_VAR
    5. WIDGET_CSS_CLASS
    6. PLAINTEXT_LINE_LENGTH
    7. ADMIN_{CONSTANTS}
    8. DEV_{CONSTANTS}
    9. INSTALL_{CONSTANTS}
    10. TRANSACTION_{CONSTANTS}
  5. Codesnippets
    1. Create your own sales report
    2. Order history - todays orders
    3. Email/Print templates
    4. Email Subject Line
    5. Add attachment to email
    6. On order status update
    7. Unconfirmed orders
    8. Customise order id
    9. Changing post type arguments
    10. Gateway filter frontend
    11. Users previous orders
    12. Dynamic menu item prices
    13. Prices output loop
    14. Pickup opening times
    15. Checkout Formfields
    16. Additional validation function
  6. Extensions / Gateways
    1. Google Cloudprint
    2. Cross-Sells
    3. Goodcom Printer
    4. Add Ingredients
    5. Pdf Invoices
    6. Delivery By Post/Zipcode
    7. Autoprint
    8. Confirm | Reject | Notify
    9. Gateway - Stripe

6.9.Gateway - Stripe

Filters/Codesnippets WPPizza -> Gateways -> Stripe

Codesnippet(s) to modify “Stripe” gateway options – namely test/live api keys in this example – depending on the user selection of a custom added dropdown formfield, in this case allowing for different stripe accounts to be targeted depending on “Shop Branches” selection by user (requires WPPizza Stripe v4.1+)

 
 

A) Register a custom “Shop Branches” dropdown formfield as per “Register Formfields” filter

@param: array
@return: array

/*
	register a dropdown field containing shop branches
*/
add_filter('wppizza_register_formfields', 'myprefix_branches_dropdown');
function myprefix_branches_dropdown($formfields){	

	/* 
		*unique* identifier for the formfield you want to add
	*/
	$unique_ident = 'shop_branch';

	/*********************************************** 
		adding a select dropdown
	***********************************************/
	$formfields[$unique_ident] = array(
		/* sort order - at which position is this field displayed */
		'sort' => 10,
		/* the unique ident  */
		'key' => $unique_ident ,
		/* label displayed for the formfield */
		'lbl' => 'some label',
		/* an array of available dropdown values*/
		'value' => array('Branch 1','Branch 2','Branch 3','Branch N'),
		/* 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,
		),			
	);

return $formfields;
}

 
 

B) Set session data – via ajax – on change of dropdown value

/*
	adding javascript to footer of checkout page using 'wp_footer' action
	- updates (session) user data - via ajax - on change of dropdown field
	- results in reload of page which subsequently applies filtered options
	as per 'wppizza_gateway_stripe_filter_options' below
*/
add_action('wp_footer', 'myprefix_on_branches_change');
function myprefix_on_branches_change(){	

	/* 
		same *unique* identifier set for the formfield
	*/
	$unique_ident = 'shop_branch';

	if(wppizza_is_checkout()){
		echo"<script> 
	
			jQuery(document).ready(function($){
				
				$(document).on('change', '#".$unique_ident."', function(e){
					//add loading div 
					$('html').css({'position':'relative'});/*stretch html to make loading cover whole page */
					$('body').prepend('<div class=\"wppizza-loading\"></div>');
					$('.wppizza-ordernow').attr('disabled', 'true');/* disable send order button */
				
					jQuery.post(wppizza.ajaxurl , {action :'wppizza_json', vars:{'type':'update_userdata', 'data': $('#wppizza-send-order').serialize()}}, function(obj) {
						
						window.location.reload(true);
						
						return;
						
					},'json');
				
				});
			
			});
	
		</script>";
	
	}
}

 
 

C) Apply live/test Api keys depending on “Branch” selected

@param: array
@param: array
@param: str
@return: array

/*
	apply test/live keys 
	depending on branch selected
	Note: the 'filter_ident' parameter (identifies which function calls the filter) is only referenced here for completeness sake and will not be required in 99.9% of cases
*/
add_filter('wppizza_gateway_stripe_filter_options', 'myprefix_filter_stripe_options', 10, 3);
function myprefix_filter_stripe_options($gateway_options, $order_details, $filter_ident){	

	/* 
		same *unique* identifier set for the formfield
	*/
	$unique_ident = 'shop_branch';
	
	/*
		values branch 1
	*/
	if($order_details['customer'][$unique_ident]['value'] == 'Branch 1' ){
		/*
			set Stripe API keys as required for Branch 1
			edit as required 
		*/
		$gateway_options['LiveSecretKey'] = 'sk_live_someapikeybranch_1';
		$gateway_options['LivePublishableKey'] = 'pk_live_someapikeybranch_1';
		$gateway_options['TestSecretKey'] = 'sk_test_someapikeybranch_1';
		$gateway_options['TestPublishableKey'] = 'pk_test_someapikeybranch_1';
		$gateway_options['WebhookLiveKey'] = 'whsec_someapikeybranch_1';
		$gateway_options['WebhookTestKey'] = 'whsec_someapikeybranch_1';
		
	}
	/*
		values branch 2
	*/
	elseif($order_details['customer'][$unique_ident]['value'] == 'Branch 2' ){
		
		/*
			set Stripe API keys as required for Branch 2
			edit as required 
		*/
		$gateway_options['LiveSecretKey'] = 'sk_live_someapikeybranch_2';
		$gateway_options['LivePublishableKey'] = 'pk_live_someapikeybranch_2';
		$gateway_options['TestSecretKey'] = 'sk_test_someapikeybranch_2';
		$gateway_options['TestPublishableKey'] = 'pk_test_someapikeybranch_2';
		$gateway_options['WebhookLiveKey'] = 'whsec_someapikeybranch_2';
		$gateway_options['WebhookTestKey'] = 'whsec_someapikeybranch_2';		
		
	}
	
	/*
		... etc etc ....
	*/
	
return $gateway_options;
}

Suggest Edit

documentor id 5