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.