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:
parent
967d3e9c4c
commit
6f3dab5c53
1 changed files with 91 additions and 11 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue