Change prices of menu item(s) depending on day of week

Dynamically change menu items prices depending on weekday

a filter to change menu items prices depending on day of week. To use in your theme’s functions.php using the wordpress standard get_post_metadata filter

get_post_metadata (wordpress standard filter)

@param: array
@return: array

example:

/***

change "myprefix" occurences with your own prefix 

change sections labelled "== ADJUST .....== as required

***/
add_filter('get_post_metadata', 'myprefix_wppizza_item_price', 10, 4);
function myprefix_wppizza_item_price($metadata, $object_id, $meta_key, $single) {

	/********************************
	
		skip if non wppizza meta key
	
	********************************/
	if( $meta_key != 'wppizza' ){ return;}
	
	/*******************************
	
		menu item id's that need to change prices depending on day
		== ADJUST ID'S (wppizza menu item id's) AS REQUIRED ==
	
	********************************/
	$menu_item_ids=array(5,65,66,32);	
	/**
		if menu item id not in array above, skip
	**/
	if(!in_array($object_id, $menu_item_ids )){return;}

	/********************************
	
		get current weekday
	
	*********************************/
	$current_weekday=date('w',current_time('timestamp'));//Numeric representation of the day of the week. 0 (for Sunday) through 6 (for Saturday)
	/**
		only change prices on wednesdays 
		(i.e current_weekday==3), else skip 
		
		== ADJUST WEEKDAY INTEGER AS  REQUIRED ==
	**/
	if($current_weekday!=3){ return ;}

	/************************************
	
		ok, now let's change meta prices
	
	*************************************/
	/*get current cached data*/
	$meta_cache = wp_cache_get( $object_id, 'post_meta' );
	/**
		if cache is empty (always, on all ajax calls it seems) get meta data
		however, we need to remove and re-add filter or we'll end up in an 
		infinite loop !
	**/
	if(empty($meta_cache)){
		/*remove filter*/
		remove_filter( 'get_post_metadata', 'myprefix_wppizza_item_price', 10 );
		$meta_cache[$meta_key][0]=get_post_meta($object_id, $meta_key, true );
		add_filter('get_post_metadata', 'myprefix_wppizza_item_price', 10, 4);
	}
		
	/*filter expects array as return*/		
	$metadata=array();
	/**unserialize meta*/
	$metadata[0] = maybe_unserialize($meta_cache[$meta_key][0]) ;

	/************************************
		 set prices as needed
		
		price tiers are zero indexed
		
		[ == ADJUST PRICE ADJUSTMENST AS REQUIRED == ]
		
		if you need this changed differently for each individual menu item,
		wrap the below into a conditional like 
		
		if($object_id=65){...}
		if($object_id=66){...}
		etc
		
	*************************************/
		/**first (smallest -> index 0 ) size -> minus 0.50**/
		$metadata[0]['prices'][0]=$metadata[0]['prices'][0]-0.5;

		/**second (medium -> index 1 ) size, if exists  -> minus 1.20**/
		if(!empty($metadata[0]['prices'][1])){
			$metadata[0]['prices'][1]=$metadata[0]['prices'][1]-1.2;
		}

		/**third (largest -> index 2 ) size, if exists -> minus 1.50**/
		if(!empty($metadata[0]['prices'][2])){
			$metadata[0]['prices'][2]=$metadata[0]['prices'][2]-1.5;
		}
		/*
		
		if you have more than 3 sizes, change indexes as required (zero indexed)
		the 4th would become  
			[0]['prices'][3]
		the 5th would become  	
			[0]['prices'][4]
			and so on
		*/

	/**return the changed meta data**/
	return $metadata;	
}