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

Viewing 1 post (of 1 total)
  • Author
    Posts
  • #14598

    Olly
    Admin & Mod

    a filter to change menu items prices depending on day of week.
    to use in your theme’s functions.php

    
    /***
    
    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;	
    }
    
Viewing 1 post (of 1 total)

The topic ‘change prices of menu item(s) depending on day of week’ is closed to new replies.