admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('hvac_profile_nonce') )); // Enqueue media uploader for profile photo if (is_page('trainer/profile/edit')) { wp_enqueue_media(); } } } /** * Render profile view */ public function render_profile_view() { if (!is_user_logged_in() || !current_user_can('hvac_trainer')) { return '

You must be logged in as a trainer to view this page.

'; } $user_id = get_current_user_id(); $user = get_userdata($user_id); // Get user meta $phone = get_user_meta($user_id, 'user_phone', true); $city = get_user_meta($user_id, 'user_city', true); $state = get_user_meta($user_id, 'user_state', true); $country = get_user_meta($user_id, 'user_country', true); $linkedin = get_user_meta($user_id, 'user_linkedin', true); $certifications = get_user_meta($user_id, 'trainer_certifications', true); $years_experience = get_user_meta($user_id, 'years_experience', true); $profile_photo_id = get_user_meta($user_id, 'profile_photo_id', true); // Get organization info $organizer_id = get_user_meta($user_id, 'organizer_id', true); $organization = null; if ($organizer_id) { $organization = get_post($organizer_id); } ob_start(); ?>

Trainer Profile

Edit Profile
Trainer > Profile > View
$user->display_name)); ?>
first_name, 0, 1) . substr($user->last_name, 0, 1)); ?>
get_trainer_event_count($user_id); ?> Events Created
get_trainer_student_count($user_id); ?> Students Trained
Years Experience

Personal Information

Name: first_name . ' ' . $user->last_name); ?>
Email: user_email); ?>
Phone:
Location:
LinkedIn: View Profile
description)): ?>

About

description)); ?>

Training Organization

Organization: post_title); ?>
Headquarters:

Certifications

You must be logged in as a trainer to view this page.

'; } $user_id = get_current_user_id(); $user = get_userdata($user_id); // Get user meta $phone = get_user_meta($user_id, 'user_phone', true); $city = get_user_meta($user_id, 'user_city', true); $state = get_user_meta($user_id, 'user_state', true); $country = get_user_meta($user_id, 'user_country', true); $linkedin = get_user_meta($user_id, 'user_linkedin', true); $website = $user->user_url; $certifications = get_user_meta($user_id, 'trainer_certifications', true); $years_experience = get_user_meta($user_id, 'years_experience', true); $profile_photo_id = get_user_meta($user_id, 'profile_photo_id', true); ob_start(); ?>

Edit Profile

Trainer > Profile > Edit

Profile Photo

No photo uploaded

Personal Information

Location

Professional Information

Cancel
$user_id, 'first_name' => sanitize_text_field($_POST['first_name']), 'last_name' => sanitize_text_field($_POST['last_name']), 'display_name' => sanitize_text_field($_POST['display_name']), 'user_email' => sanitize_email($_POST['email']), 'user_url' => esc_url_raw($_POST['website']), 'description' => wp_kses_post($_POST['description']) ); $result = wp_update_user($user_data); if (is_wp_error($result)) { wp_send_json_error($result->get_error_message()); } // Update user meta update_user_meta($user_id, 'user_phone', sanitize_text_field($_POST['phone'])); update_user_meta($user_id, 'user_city', sanitize_text_field($_POST['city'])); update_user_meta($user_id, 'user_state', sanitize_text_field($_POST['state'])); update_user_meta($user_id, 'user_country', sanitize_text_field($_POST['country'])); update_user_meta($user_id, 'user_linkedin', esc_url_raw($_POST['linkedin'])); update_user_meta($user_id, 'years_experience', intval($_POST['years_experience'])); update_user_meta($user_id, 'trainer_certifications', sanitize_textarea_field($_POST['certifications'])); // Update profile photo if changed if (isset($_POST['profile_photo_id'])) { update_user_meta($user_id, 'profile_photo_id', intval($_POST['profile_photo_id'])); } wp_send_json_success('Profile updated successfully.'); } /** * AJAX handler for uploading profile photo */ public function ajax_upload_profile_photo() { check_ajax_referer('hvac_profile_nonce', 'nonce'); if (!current_user_can('hvac_trainer')) { wp_send_json_error('Unauthorized'); } if (!isset($_FILES['profile_photo'])) { wp_send_json_error('No file uploaded'); } require_once(ABSPATH . 'wp-admin/includes/image.php'); require_once(ABSPATH . 'wp-admin/includes/file.php'); require_once(ABSPATH . 'wp-admin/includes/media.php'); $attachment_id = media_handle_upload('profile_photo', 0); if (is_wp_error($attachment_id)) { wp_send_json_error($attachment_id->get_error_message()); } // Update user meta update_user_meta(get_current_user_id(), 'profile_photo_id', $attachment_id); wp_send_json_success(array( 'attachment_id' => $attachment_id, 'url' => wp_get_attachment_image_url($attachment_id, 'thumbnail') )); } /** * Get trainer event count */ private function get_trainer_event_count($user_id) { $post_type = class_exists('Tribe__Events__Main') ? Tribe__Events__Main::POSTTYPE : 'tribe_events'; $count = count_user_posts($user_id, $post_type); return $count; } /** * Get trainer student count */ private function get_trainer_student_count($user_id) { global $wpdb; // Get all events by this trainer $post_type = class_exists('Tribe__Events__Main') ? Tribe__Events__Main::POSTTYPE : 'tribe_events'; $events = get_posts(array( 'post_type' => $post_type, 'author' => $user_id, 'posts_per_page' => -1, 'fields' => 'ids' )); if (empty($events)) { return 0; } // Count attendees across all events $attendee_count = 0; foreach ($events as $event_id) { $attendees = get_post_meta($event_id, '_tribe_tickets_attendees', true); if (is_array($attendees)) { $attendee_count += count($attendees); } } return $attendee_count; } }