damsoi01
Forum Replies Created
-
Forum: Plugins
In reply to: [Event Booking Manager for WooCommerce] Repeated event ticket sales issueThe updated plugin version contains simplified CSS for related events and timeline display. However, it does NOT include any of the critical fixes for:
– ✅ Recurring event ticket sales
– ✅ WPML multilingual synchronization
– ✅ Language filtering
– ✅ Settings sync system
Try and be active on the ticket because I essentially gave you the code to ensure proper inventory management and client experience and backend improvements.
Forum: Plugins
In reply to: [Event Booking Manager for WooCommerce] Repeated event ticket sales issueI will check it out, I am also chatting on a ticket #5120 with your team. I fixed many issues with the plugin and sent you the notes and the code ready to use. Did you implement it in the new update? Because it is essential to be a usable plugin in a professional context.
Thanks a lot!
Similar issue with the elementor timeline horizontal widget: https://prnt.sc/p8bYF3nwqk3d
It should be showing the events like it did in previous version as normal framesAnd related events at the bottom of an event detail page also displays wrong: https://prnt.sc/UKuD0dqUU6Cc
These issues were not a problem before the last update. And I did clean cache, css files, js files, cloudflare, tried on new machines etc… same result everywhere.
Forum: Plugins
In reply to: [Event Booking Manager for WooCommerce] Repeated event ticket sales issueActually tested in my sandbox with two file changes:
/templates/layout/ticket_type.php<?php
/*
* @Author [email protected]
* Copyright: mage-people.com
*/
if ( ! defined( 'ABSPATH' ) ) {
die;
} // Cannot access pages directly.
$event_id = $event_id ?? 0;
$all_dates = $all_dates ?? MPWEM_Functions::get_dates( $event_id );
$all_times = $all_times ?? MPWEM_Functions::get_times( $event_id, $all_dates );
$date = empty( $date ) ? MPWEM_Functions::get_upcoming_date_time( $event_id, $all_dates, $all_times ) : $date;
$total_available = $total_available ?? MPWEM_Functions::get_total_available_seat( $event_id, $date );
$total_available = max( $total_available, 0 );
$mep_available_seat = MPWEM_Global_Function::get_post_info( $event_id, 'mep_available_seat', 'on' );
$total_sold = mep_ticket_type_sold( $event_id, '', $date );
$total_ticket = MPWEM_Functions::get_total_ticket( $event_id, $date );
$total_reserve = MPWEM_Functions::get_reserve_ticket( $event_id, $date );
$total_available = $total_ticket - ( $total_sold + $total_reserve );
$total_available = max( $total_available, 0 );
if ( $total_available > 0 ) {
do_action( 'mepgq_max_qty_hook', $event_id, $total_available, $date );
$ticket_types = MPWEM_Global_Function::get_post_info( $event_id, 'mep_event_ticket_type', [] );
$count = 0;
if ( sizeof( $ticket_types ) > 0 ) { ?>
<div class="mpwem_ticket_type">
<div class="card-body">
<?php foreach ( $ticket_types as $ticket_type ) {
$option_ticket_enable = array_key_exists( 'option_ticket_enable', $ticket_type ) ? $ticket_type['option_ticket_enable'] : 'yes';
if ( $option_ticket_enable == 'yes' ) {
$input_data = [];
$ticket_permission = apply_filters( 'mpwem_ticket_permission', true, $ticket_type );
do_action( 'mep_ticket_type_loop_list_row_start', $event_id, $date, $ticket_type );
if ( $ticket_permission ) {
//echo '<pre>';print_r($ticket_type);echo '</pre>';
$ticket_name = array_key_exists( 'option_name_t', $ticket_type ) ? $ticket_type['option_name_t'] : '';
$ticket_details = array_key_exists( 'option_details_t', $ticket_type ) ? $ticket_type['option_details_t'] : '';
$ticket_price = array_key_exists( 'option_price_t', $ticket_type ) ? $ticket_type['option_price_t'] : 0;
$ticket_price_ = apply_filters( 'mep_ticket_type_price', $ticket_price, $ticket_name, $event_id, $ticket_type );
$ticket_price_ = apply_filters( 'mpwem_group_ticket_price', $ticket_price_, $event_id, $ticket_name );
$ticket_price_wc = wc_price( $ticket_price_ );
$ticket_price = MPWEM_Global_Function::price_convert_raw( $ticket_price_wc );
$ticket_qty = array_key_exists( 'option_qty_t', $ticket_type ) ? $ticket_type['option_qty_t'] : 0;
$ticket_qty = apply_filters( 'filter_mpwem_gq_ticket', $ticket_qty, $total_available, $event_id );
$ticket_d_qty = array_key_exists( 'option_default_qty_t', $ticket_type ) ? $ticket_type['option_default_qty_t'] : 0;
$ticket_min_qty = apply_filters( 'filter_mpwem_min_ticket', 0, $event_id, $ticket_type );
$ticket_max_qty = apply_filters( 'filter_mpwem_max_ticket', '', $event_id, $ticket_type );
$ticket_input_type = array_key_exists( 'option_qty_t_type', $ticket_type ) ? $ticket_type['option_qty_t_type'] : 'inputbox';
$available = MPWEM_Functions::get_available_ticket( $event_id, $ticket_name, $date, $ticket_type );
$available = apply_filters( 'filter_mpwem_gq_ticket', $available, $total_available, $event_id );
$available = apply_filters( 'mpwem_group_ticket_qty', $available, $event_id, $ticket_name );
$available = max( 0, floor( $available ) );
if ( $ticket_name ) {
$input_data['name'] = 'option_qty[]';
$input_data['price'] = $ticket_price;
$input_data['available'] = $available;
$input_data['d_qty'] = $ticket_d_qty;
$input_data['min_qty'] = $ticket_min_qty;
$input_data['max_qty'] = $ticket_max_qty;
$input_data['type'] = $ticket_input_type;
$input_data = apply_filters( 'filter_mpwem_min_qty_must', $input_data, $event_id );
//echo '<pre>';print_r($input_data);echo '</pre>';
$count ++;
?>
<div class="mep_ticket_item">
<div class="ticket-data">
<div class="ticket-info">
<div class="ticket-name"><?php echo esc_html( $ticket_name ); ?></div>
<?php if ( $ticket_details ) { ?>
<div class="ticket-description"><?php echo esc_html( $ticket_details ); ?></div>
<?php } ?>
<?php
// Check if low stock warning should be shown
$show_low_stock_warning = false;
if ( function_exists( 'mep_is_low_stock' ) ) {
$show_low_stock_warning = mep_is_low_stock( $event_id, $ticket_name, $available );
}
// Only show "Tickets remaining" if low stock warning is not shown
if ( $mep_available_seat == 'on' && ! $show_low_stock_warning ) { ?>
<div class="ticket-remaining xtra-item-left <?php echo $available <= 10 ? 'remaining-low' : 'remaining-high'; ?>">
<?php echo esc_html( max( $available, 0 ) ) . __( ' Tickets remaining', 'mage-eventpress' ); ?>
</div>
<?php } ?>
<?php
// Display low stock warning
if ( function_exists( 'mep_display_low_stock_warning' ) ) {
mep_display_low_stock_warning( $event_id, $ticket_name, $available );
}
?>
</div>
<div class="quantity-control">
<input type="hidden" name='option_name[]' value='<?php echo esc_attr( $ticket_name ); ?>'/>
<input type="hidden" name='ticket_type[]' value='<?php echo esc_attr( $ticket_name ); ?>'/>
<?php do_action( 'mpwem_hidden_item_ticket', $ticket_name, $event_id ); ?>
<?php
$early_date = apply_filters( 'mpwem_early_date', true, $ticket_type, $event_id );
if ( $early_date ) {
$sale_end_datetime = array_key_exists( 'option_sale_end_date_t', $ticket_type ) && ! empty( $ticket_type['option_sale_end_date_t'] ) ? date( 'Y-m-d H:i', strtotime( $ticket_type['option_sale_end_date_t'] ) ) : '';
if ( $sale_end_datetime ) {
$current_time = current_time( 'Y-m-d H:i' );
// Check if event is recurring
$is_recurring = MPWEM_Global_Function::get_post_info( $event_id, 'mep_enable_recurring', 'no' ) === 'yes';
// For recurring events, handle sale end date differently
if ( $is_recurring && ! empty( $date ) ) {
$event_start_datetime = date( 'Y-m-d H:i', strtotime( $date ) );
$sale_end_timestamp = strtotime( $sale_end_datetime );
$current_timestamp = strtotime( $current_time );
$event_start_timestamp = strtotime( $event_start_datetime );
// Get buffer time setting (in minutes, convert to seconds)
$buffer_time = MPWEM_Global_Function::get_post_info( $event_id, 'mep_buffer_time', 0 ) * 60;
$event_start_timestamp_minus_buffer = $event_start_timestamp - $buffer_time;
// If sale end date has passed, allow sales until event start date (minus buffer time)
// If sale end date hasn't passed, use it as the cutoff
if ( $sale_end_timestamp < $current_timestamp ) {
// Sale end date passed - allow sales until event start date minus buffer time
$tickets_available = $current_timestamp < $event_start_timestamp_minus_buffer;
$effective_end_date = date( 'Y-m-d H:i', $event_start_timestamp_minus_buffer );
} else {
// Sale end date hasn't passed - use it as cutoff
$tickets_available = $current_timestamp < $sale_end_timestamp;
$effective_end_date = $sale_end_datetime;
}
if ( $tickets_available ) {
MPWEM_Custom_Layout::qty_input( $input_data );
} else {
// Show sale closed message
?>
<span class='early-bird-future-date-txt' style="font-size: 12px;"><?php _e( 'Sale close On: ', 'mage-eventpress' );
echo get_mep_datetime( $effective_end_date, 'date-time-text' ); ?></span>
<input type="hidden" name="option_qty[]" value="0" data-price="<?php echo esc_attr( $ticket_price ); ?>"/>
<?php
}
} else {
// Non-recurring events: use existing logic
if ( strtotime( $current_time ) < strtotime( $sale_end_datetime ) ) {
MPWEM_Custom_Layout::qty_input( $input_data );
} else {
?>
<span class='early-bird-future-date-txt' style="font-size: 12px;"><?php _e( 'Sale close On: ', 'mage-eventpress' );
echo get_mep_datetime( $sale_end_datetime, 'date-time-text' ); ?></span>
<input type="hidden" name="option_qty[]" value="0" data-price="<?php echo esc_attr( $ticket_price ); ?>"/>
<?php
}
}
} else {
MPWEM_Custom_Layout::qty_input( $input_data );
}
} else {
$sale_start_datetime = array_key_exists( 'option_sale_start_date_t', $ticket_type ) && ! empty( $ticket_type['option_sale_start_date_t'] ) ? date( 'Y-m-d H:i', strtotime( $ticket_type['option_sale_start_date_t'] ) ) : '';
?>
<span class='early-bird-future-date-txt' style="font-size: 12px;"><?php _e( 'Available On: ', 'mage-eventpress' );
echo get_mep_datetime( $sale_start_datetime, 'date-time-text' ); ?></span>
<input type="hidden" name="option_qty[]" value="0" data-price="<?php echo esc_attr( $ticket_price ); ?>"/>
<?php
}
?>
</div>
<div class="ticket-price">
<?php
// Display limited availability ribbon above price
if ( function_exists( 'mep_display_limited_availability_ribbon' ) ) {
mep_display_limited_availability_ribbon( $event_id, $ticket_name, $available );
}
?>
<?php echo wc_price( $ticket_price_ ); ?>
<?php //echo wc_price( $ticket_price ); ?>
</div>
</div>
<?php do_action( 'mpwem_multi_attendee', $event_id ); ?>
</div>
<?php
}
}
}
}
?>
</div>
</div>
<?php
}
} else {
MPWEM_Layout::msg( __( 'Sorry, no ticket available', 'mage-eventpress' ), '_layout_default_bg_warning' );
do_action( 'mep_after_no_seat_notice', $event_id );
}
// Show waitlist form after ticket types if waitlist is enabled (even when tickets are available)
do_action( 'mep_after_ticket_types', $event_id );
// echo '<pre>';print_r($all_dates);echo '</pre>';And then edit /templates/layout/ticket_type_kera.php:
<?php
/*
* @Author [email protected]
* Copyright: mage-people.com
*/
if ( ! defined( 'ABSPATH' ) ) {
die;
} // Cannot access pages directly.
$event_id = $event_id ?? 0;
$all_dates = $all_dates ?? MPWEM_Functions::get_dates( $event_id );
$all_times = $all_times ?? MPWEM_Functions::get_times( $event_id, $all_dates );
$date = $date ?? MPWEM_Functions::get_upcoming_date_time( $event_id, $all_dates, $all_times );
$total_available = MPWEM_Functions::get_total_available_seat( $event_id, $date );
$mep_available_seat = MPWEM_Global_Function::get_post_info( $event_id, 'mep_available_seat', 'on' );
if ( $total_available > 0 ) {
do_action( 'mepgq_max_qty_hook', $event_id, max( $total_available, 0 ), $date );
$ticket_types = MPWEM_Global_Function::get_post_info( $event_id, 'mep_event_ticket_type', [] );
if ( sizeof( $ticket_types ) > 0 ) {
$categories = MPWEM_Global_Function::get_all_term_data( 'mep_tic_cat' );
$new_tickets = [];
$group_name = '';
foreach ( $ticket_types as $ticket_type ) {
$option_ticket_enable = array_key_exists( 'option_ticket_enable', $ticket_type ) ? $ticket_type['option_ticket_enable'] : 'yes';
if ( $option_ticket_enable == 'yes' ) {
$ticket_name = array_key_exists( 'option_name_t', $ticket_type ) ? $ticket_type['option_name_t'] : '';
$ticket_group = array_key_exists( 'group_category', $ticket_type ) ? $ticket_type['group_category'] : '';
$available = MPWEM_Functions::get_available_ticket( $event_id, $ticket_name, $date, $ticket_type );
if ( $ticket_group && in_array( $ticket_group, $categories ) ) {
$meta_id = MPWEM_Global_Function::get_meta_id_by_name( 'mep_tic_cat', 'name', $ticket_group );
$ticket_group_order = '';
if ( sizeof( $new_tickets ) > 0 ) {
$exit = 0;
foreach ( $new_tickets as $key => $new_ticket ) {
if ( $new_ticket['group'] == $ticket_group ) {
$ticket_group_order = $key;
$exit = 1;
}
}
if ( $exit == 0 ) {
$ticket_group_order = intval( MPWEM_Global_Function::get_term_meta( $meta_id, 'category_order' ) );
if ( empty( $ticket_group_order ) || $ticket_group_order == 0 ) {
$ticket_group_order = $meta_id;
}
}
} else {
$ticket_group_order = intval( MPWEM_Global_Function::get_term_meta( $meta_id, 'category_order' ) );
}
//echo '<pre>';print_r();echo '</pre>';
$new_tickets[ $ticket_group_order ]['group'] = $ticket_group;
$new_tickets[ $ticket_group_order ]['term_id'] = $meta_id;
$new_tickets[ $ticket_group_order ]['info'][] = $ticket_type;
if ( array_key_exists( $ticket_group_order, $new_tickets ) && array_key_exists( 'available', $new_tickets[ $ticket_group_order ] ) ) {
$new_tickets[ $ticket_group_order ]['available'] = $new_tickets[ $ticket_group_order ]['available'] + $available;
} else {
$new_tickets[ $ticket_group_order ]['available'] = $available;
}
}
}
}
ksort( $new_tickets );
//echo '<pre>';print_r($new_tickets);echo '</pre>';
if ( sizeof( $new_tickets ) > 0 ) {
?>
<div class="mpTabs kera_ticket_area">
<div class="tabLists">
<?php $tab_count = 0;
foreach ( $new_tickets as $tickets ) {
$meta_id = array_key_exists( 'term_id', $tickets ) ? $tickets['term_id'] : '';
$des = get_term_meta( $meta_id, 'custom_description', true );
?>
<div data-tabs-target="#category_name_<?php echo esc_attr( $tab_count ); ?>">
<?php
if ( $des ) {
echo wp_kses_post( $des );
} else {
echo esc_html( $tickets['group'] );
}
$tab_count ++;
?>
</div>
<?php } ?>
</div>
<div class="tabsContent _layout_default">
<?php $tab_count = 0;
foreach ( $new_tickets as $tickets ) { ?>
<div class="tabsItem" data-tabs="#category_name_<?php echo esc_attr( $tab_count ); ?>">
<?php
$tab_count ++;
$exit_avail = 0;
$ticket_types = $tickets['info'];
$count = 0;
if ( sizeof( $ticket_types ) > 0 ) { ?>
<div class="data-label">
<p><?php echo esc_html( $tickets['group'] ); ?></p>
<p><?php echo esc_html__( 'Price', 'mage-eventpress' ); ?></p>
</div>
<div class="mpwem_ticket_type">
<?php foreach ( $ticket_types as $ticket_type ) {
$input_data = [];
$ticket_permission = apply_filters( 'mpwem_ticket_permission', true, $ticket_type );
if ( $ticket_permission ) {
$ticket_name = array_key_exists( 'option_name_t', $ticket_type ) ? $ticket_type['option_name_t'] : '';
$ticket_details = array_key_exists( 'option_details_t', $ticket_type ) ? $ticket_type['option_details_t'] : '';
$ticket_price = array_key_exists( 'option_price_t', $ticket_type ) ? $ticket_type['option_price_t'] : 0;
$ticket_price_ = apply_filters( 'mep_ticket_type_price', $ticket_price, $ticket_name, $event_id, $ticket_type );
$ticket_price_ = apply_filters( 'mpwem_group_ticket_price', $ticket_price_, $event_id, $ticket_name );
$ticket_price_wc = wc_price( $ticket_price_ );
$ticket_price = MPWEM_Global_Function::price_convert_raw( $ticket_price_wc );
$ticket_qty = array_key_exists( 'option_qty_t', $ticket_type ) ? $ticket_type['option_qty_t'] : 0;
$ticket_d_qty = array_key_exists( 'option_default_qty_t', $ticket_type ) ? $ticket_type['option_default_qty_t'] : 0;
$ticket_min_qty = apply_filters( 'filter_mpwem_min_ticket', 0, $event_id, $ticket_type );
$ticket_max_qty = apply_filters( 'filter_mpwem_max_ticket', '', $event_id, $ticket_type );
$ticket_input_type = array_key_exists( 'option_qty_t_type', $ticket_type ) ? $ticket_type['option_qty_t_type'] : 'inputbox';
$available = MPWEM_Functions::get_available_ticket( $event_id, $ticket_name, $date, $ticket_type );
$available = apply_filters( 'mpwem_group_ticket_qty', $available, $event_id, $ticket_name );
$available = max( 0, floor( $available ) );
if ( $ticket_name && $ticket_qty > 0 ) {
$input_data = [];
$input_data['name'] = 'option_qty[]';
$input_data['price'] = $ticket_price;
$input_data['available'] = $available;
$input_data['d_qty'] = $ticket_d_qty;
$input_data['min_qty'] = $ticket_min_qty;
$input_data['max_qty'] = $ticket_max_qty;
$input_data['type'] = $ticket_input_type;
$input_data = apply_filters( 'filter_mpwem_min_qty_must', $input_data, $event_id );
$count ++;
if ( $count > 1 ) { ?>
<div class="_divider"></div>
<?php } ?>
<div class="mep_ticket_item">
<div class="justify_between">
<div class="">
<h6><?php echo esc_html( $ticket_name ); ?></h6>
<?php if ( $ticket_details ) { ?>
<p><?php echo esc_html( $ticket_details ); ?></p>
<?php } ?>
<?php if ( $mep_available_seat == 'on' ) { ?>
<div class="ticket-remaining xtra-item-left <?php echo $available <= 10 ? 'remaining-low' : 'remaining-high'; ?>">
<?php echo esc_html( max( $available, 0 ) ) . __( ' Tickets remaining', 'mage-eventpress' ); ?>
</div>
<?php } ?>
</div>
<div class="">
<h6 class="_text_center"><?php echo wc_price( $ticket_price_ ); ?></h6>
<input type="hidden" name='option_name[]' value='<?php echo esc_attr( $ticket_name ); ?>'/>
<input type="hidden" name='ticket_type[]' value='<?php echo esc_attr( $ticket_name ); ?>'/>
<input type="hidden" name='ticket_category[]' value='<?php echo esc_attr( $tickets['group'] ); ?>'/>
<?php do_action( 'mpwem_hidden_item_ticket', $ticket_name, $event_id ); ?>
<?php
if ( $exit_avail < 1 ) {
$early_date = apply_filters( 'mpwem_early_date', true, $ticket_type, $event_id );
if ( $early_date ) {
$sale_end_datetime = array_key_exists( 'option_sale_end_date_t', $ticket_type ) && ! empty( $ticket_type['option_sale_end_date_t'] ) ? date( 'Y-m-d H:i', strtotime( $ticket_type['option_sale_end_date_t'] ) ) : '';
if ( $sale_end_datetime ) {
$current_time = current_time( 'Y-m-d H:i' );
// Check if event is recurring
$is_recurring = MPWEM_Global_Function::get_post_info( $event_id, 'mep_enable_recurring', 'no' ) === 'yes';
// For recurring events, handle sale end date differently
if ( $is_recurring && ! empty( $date ) ) {
$event_start_datetime = date( 'Y-m-d H:i', strtotime( $date ) );
$sale_end_timestamp = strtotime( $sale_end_datetime );
$current_timestamp = strtotime( $current_time );
$event_start_timestamp = strtotime( $event_start_datetime );
// Get buffer time setting (in minutes, convert to seconds)
$buffer_time = MPWEM_Global_Function::get_post_info( $event_id, 'mep_buffer_time', 0 ) * 60;
$event_start_timestamp_minus_buffer = $event_start_timestamp - $buffer_time;
// If sale end date has passed, allow sales until event start date (minus buffer time)
// If sale end date hasn't passed, use it as the cutoff
if ( $sale_end_timestamp < $current_timestamp ) {
// Sale end date passed - allow sales until event start date minus buffer time
$tickets_available = $current_timestamp < $event_start_timestamp_minus_buffer;
$effective_end_date = date( 'Y-m-d H:i', $event_start_timestamp_minus_buffer );
} else {
// Sale end date hasn't passed - use it as cutoff
$tickets_available = $current_timestamp < $sale_end_timestamp;
$effective_end_date = $sale_end_datetime;
}
if ( $tickets_available ) {
MPWEM_Custom_Layout::qty_input( $input_data );
} else {
// Show sale closed message
?>
<span class='early-bird-future-date-txt' style="font-size: 12px;"><?php _e( 'Sale close On: ', 'mage-eventpress' );
echo get_mep_datetime( $effective_end_date, 'date-time-text' ); ?></span>
<input type="hidden" name="option_qty[]" value="0" data-price="<?php echo esc_attr( $ticket_price ); ?>"/>
<?php
}
} else {
// Non-recurring events: use existing logic
if ( strtotime( $current_time ) < strtotime( $sale_end_datetime ) ) {
MPWEM_Custom_Layout::qty_input( $input_data );
} else {
?>
<span class='early-bird-future-date-txt' style="font-size: 12px;"><?php _e( 'Sale close On: ', 'mage-eventpress' );
echo get_mep_datetime( $sale_end_datetime, 'date-time-text' ); ?></span>
<input type="hidden" name="option_qty[]" value="0" data-price="<?php echo esc_attr( $ticket_price ); ?>"/>
<?php
}
}
} else {
MPWEM_Custom_Layout::qty_input( $input_data );
}
} else {
$sale_start_datetime = array_key_exists( 'option_sale_start_date_t', $ticket_type ) && ! empty( $ticket_type['option_sale_start_date_t'] ) ? date( 'Y-m-d H:i', strtotime( $ticket_type['option_sale_start_date_t'] ) ) : '';
?>
<span class='early-bird-future-date-txt' style="font-size: 12px;"><?php _e( 'Available On: ', 'mage-eventpress' );
echo get_mep_datetime( $sale_start_datetime, 'date-time-text' ); ?></span>
<input type="hidden" name="option_qty[]" value="0" data-price="<?php echo esc_attr( $ticket_price ); ?>"/>
<?php
}
} else {
?> <input type="hidden" name="option_qty[]" value="0" data-price="<?php echo esc_attr( $ticket_price ); ?>"/><?php
esc_html_e( 'Upcoming', 'mage-eventpress' );
}
$exit_avail = $available;
?>
</div>
</div>
<?php do_action( 'mpwem_multi_attendee', $event_id ); ?>
</div>
<?php
}
}
}
?>
</div>
<?php } ?>
</div>
<?php } ?>
</div>
</div>
<?php
}
}
} else {
MPWEM_Layout::msg( esc_html__( 'Sorry, no ticket available', 'mage-eventpress' ) );
}
// echo '<pre>';print_r($total_ticket);echo '</pre>';
// echo '<pre>';print_r($total_reserve);echo '</pre>';
// echo '<pre>';print_r($total_sold);echo '</pre>';
// echo '<pre>';print_r($all_dates);echo '</pre>';With this, you fix the issue and it is backward compatible for all events. It fixed the issue on my end.