fix: Add direct database query fallback for email attendees page

- Update email attendees class to handle custom attendee data
- Add fallback method to directly query attendee data from database
- Support multiple field formats for attendee names and emails
- Ensure email page works with test attendees created via WP-CLI

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
bengizmo 2025-05-20 16:35:15 -03:00
parent 967d3e9c4c
commit 6f3dab5c53

View file

@ -79,29 +79,109 @@ class HVAC_Email_Attendees_Data {
return array();
}
// Use The Events Calendar's function to get attendees
$attendees = tribe_tickets_get_attendees( $this->event_id );
$processed_attendees = array();
if ( ! empty( $attendees ) ) {
foreach ( $attendees as $attendee ) {
$email = isset( $attendee['holder_email'] ) ? $attendee['holder_email'] : '';
$name = isset( $attendee['holder_name'] ) ? $attendee['holder_name'] : '';
$ticket_name = isset( $attendee['ticket_name'] ) ? $attendee['ticket_name'] : '';
// First try using The Events Calendar's function
if (function_exists('tribe_tickets_get_attendees')) {
$attendees = tribe_tickets_get_attendees( $this->event_id );
if ( ! empty( $attendees ) ) {
foreach ( $attendees as $attendee ) {
$email = isset( $attendee['holder_email'] ) ? $attendee['holder_email'] : '';
if (empty($email) && isset($attendee['purchaser_email'])) {
$email = $attendee['purchaser_email'];
}
$name = isset( $attendee['holder_name'] ) ? $attendee['holder_name'] : '';
if (empty($name) && isset($attendee['purchaser_name'])) {
$name = $attendee['purchaser_name'];
}
$ticket_name = isset( $attendee['ticket_name'] ) ? $attendee['ticket_name'] : '';
// Only include attendees with valid emails
if ( ! empty( $email ) && is_email( $email ) ) {
$processed_attendees[] = array(
'name' => $name,
'email' => $email,
'ticket_name' => $ticket_name,
'attendee_id' => isset( $attendee['attendee_id'] ) ? $attendee['attendee_id'] : 0,
'order_id' => isset( $attendee['order_id'] ) ? $attendee['order_id'] : 0,
);
}
}
}
}
// If no attendees found or function doesn't exist, fall back to direct query
if (empty($processed_attendees)) {
$processed_attendees = $this->get_attendees_fallback();
}
return $processed_attendees;
}
/**
* Fallback method to get attendees directly from the database
*
* @return array Array of attendee data
*/
private function get_attendees_fallback() {
$processed_attendees = array();
// Query for attendees directly from the database
$attendees_query = new WP_Query([
'post_type' => 'tribe_tpp_attendees',
'posts_per_page' => -1,
'meta_query' => [
[
'key' => '_tribe_tpp_event',
'value' => $this->event_id,
'compare' => '=',
],
],
]);
if ($attendees_query->have_posts()) {
while ($attendees_query->have_posts()) {
$attendees_query->the_post();
$attendee_id = get_the_ID();
// Get associated ticket
$ticket_id = get_post_meta($attendee_id, '_tribe_tpp_product', true);
$ticket_name = $ticket_id ? get_the_title($ticket_id) : 'General Admission';
// Get purchaser details
$name = get_post_meta($attendee_id, '_tribe_tickets_full_name', true);
if (empty($name)) {
$name = get_post_meta($attendee_id, '_tribe_tpp_full_name', true);
}
if (empty($name)) {
$name = get_the_title($attendee_id);
}
$email = get_post_meta($attendee_id, '_tribe_tickets_email', true);
if (empty($email)) {
$email = get_post_meta($attendee_id, '_tribe_tpp_email', true);
}
// Get order info
$order_id = get_post_meta($attendee_id, '_tribe_tpp_order', true);
// Only include attendees with valid emails
if ( ! empty( $email ) && is_email( $email ) ) {
if (!empty($email) && is_email($email)) {
$processed_attendees[] = array(
'name' => $name,
'email' => $email,
'ticket_name' => $ticket_name,
'attendee_id' => isset( $attendee['attendee_id'] ) ? $attendee['attendee_id'] : 0,
'order_id' => isset( $attendee['order_id'] ) ? $attendee['order_id'] : 0,
'attendee_id' => $attendee_id,
'order_id' => $order_id,
);
}
}
wp_reset_postdata();
}
return $processed_attendees;
}