function output($format, $target = "html") { preg_match_all("/(#@?_?[A-Za-z0-9]+)({([^}]+)})?/", $format, $placeholders); $output_string = $format; $replaces = array(); foreach ($placeholders[1] as $key => $result) { $replace = ''; $full_result = $placeholders[0][$key]; switch ($result) { case '#_BOOKINGTICKETNAME': case '#_BOOKINGTICKETDESCRIPTION': case '#_BOOKINGTICKETPRICEWITHTAX': case '#_BOOKINGTICKETPRICEWITHOUTTAX': case '#_BOOKINGTICKETTAX': case '#_BOOKINGTICKETPRICE': $replace = ''; //this booking object doesn't have 'tickets', all these become defunct break; case '#_BOOKINGTICKETS': //change how this placeholder displays, for backwards compatability ob_start(); emp_locate_template('placeholders/bookingtickets-multiple.php', true, array('EM_Multiple_Booking' => $this)); $replace = ob_get_clean(); break; case '#_BOOKINGSUMMARY': //change how this placeholder displays, for backwards compatability ob_start(); emp_locate_template('placeholders/bookingsummary-multiple.php', true, array('EM_Multiple_Booking' => $this)); $replace = ob_get_clean(); break; case '#_BOOKINGATTENDEES': //change how this placeholder displays, for backwards compatability ob_start(); emp_locate_template('placeholders/bookingattendees-multiple.php', true, array('EM_Multiple_Booking' => $this)); $replace = ob_get_clean(); break; default: $replace = $full_result; break; } $replaces[$full_result] = apply_filters('em_multiple_booking_output_placeholder', $replace, $this, $full_result, $target); } //sort out replacements so that during replacements shorter placeholders don't overwrite longer varieties. krsort($replaces); foreach ($replaces as $full_result => $replacement) { $output_string = str_replace($full_result, $replacement, $output_string); } $output_string = parent::output($output_string, $target); //run through original booking object for commonly used fields return apply_filters('em_multiple_booking_output', $output_string, $this, $format, $target); }