- Modify Css / Styles / Layout
- Templates
- Pages
- Order
- Global
- orderinfo.php (Widget)
- openingtimes.php (Widget)
- additives.php (Widget)
- navigation.list.php (Widget)
- navigation.dropdown.php (Widget)
- search.php (Widget)
- totals.php (Widget)
- pickup_choice.php (Mixed)
- login.php (Module)
- profile.register.php (Module)
- profile.update.php (Module)
- pages.pickup_note.php (Module)
- formfields.inputs.php (Module)
- formfields.values.php (Module)
- Cart
- Loop (Menu Items)
- Search Results
- Single Menu Item
- functions.php
- Filters, Actions, Functions
- Constants
- Codesnippets
- Create your own sales report
- Order history - todays orders
- Email/Print templates
- Email Subject Line
- Add attachment to email
- On order status update
- Unconfirmed orders
- Customise order id
- Changing post type arguments
- Gateway filter frontend
- Users previous orders
- Dynamic menu item prices
- Update prices in bulk
- Prices output loop
- Pickup opening times
- Checkout Formfields
- Additional validation function
- Extensions / Gateways
5.12.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; }
documentor id 5