is_trainer_page()) { wp_enqueue_style( 'hvac-breadcrumbs', HVAC_PLUGIN_URL . 'assets/css/hvac-breadcrumbs.css', array(), HVAC_PLUGIN_VERSION ); } } /** * Check if current page is a trainer page */ private function is_trainer_page() { global $wp; $current_url = home_url(add_query_arg(array(), $wp->request)); return (strpos($current_url, '/trainer/') !== false || strpos($current_url, '/master-trainer/') !== false); } /** * Render breadcrumbs for trainer pages * * @param array $options Configuration options * @return string HTML breadcrumb output */ public function render_breadcrumbs($options = array()) { if (!$this->is_trainer_page()) { return ''; } $defaults = array( 'home_text' => 'Home', 'separator' => '>', 'show_home' => true, 'schema_markup' => true, 'css_class' => 'hvac-breadcrumbs' ); $options = wp_parse_args($options, $defaults); $breadcrumbs = $this->generate_breadcrumb_trail(); if (empty($breadcrumbs)) { return ''; } return $this->render_breadcrumb_html($breadcrumbs, $options); } /** * Generate breadcrumb trail based on current URL * * @return array Array of breadcrumb items */ private function generate_breadcrumb_trail() { global $wp; $request = $wp->request; // Remove trailing slash and split by forward slash $path_parts = array_filter(explode('/', trim($request, '/'))); if (empty($path_parts)) { return array(); } $breadcrumbs = array(); $current_path = ''; // Define breadcrumb mapping for trainer paths $breadcrumb_map = array( 'trainer' => array( 'title' => 'Trainer', 'url' => '/trainer/dashboard/' ), 'master-trainer' => array( 'title' => 'Master Trainer', 'url' => '/master-trainer/master-dashboard/' ), 'dashboard' => array( 'title' => 'Dashboard', 'parent' => 'Events' ), 'master-dashboard' => array( 'title' => 'Dashboard', 'parent' => 'Master Trainer' ), 'event' => array( 'title' => 'Events', 'url' => '/trainer/dashboard/' ), 'manage' => array( 'title' => 'New Event', 'parent' => 'Events' ), 'certificate-reports' => array( 'title' => 'Reports', 'parent' => 'Certificates' ), 'generate-certificates' => array( 'title' => 'New Certificate', 'parent' => 'Certificates' ), 'certificates' => array( 'title' => 'Certificates', 'url' => '/trainer/certificate-reports/' ), 'profile' => array( 'title' => 'Personal Profile', 'parent' => 'Customize' ), 'organizer' => array( 'title' => 'Training Organizers', 'parent' => 'Customize' ), 'venue' => array( 'title' => 'Training Venues', 'parent' => 'Customize' ), 'list' => array( 'title' => 'List', 'context_dependent' => true ), 'edit' => array( 'title' => 'Edit', 'context_dependent' => true ), 'customize' => array( 'title' => 'Customize', 'url' => '/trainer/profile/' ) ); // Build breadcrumb trail for ($i = 0; $i < count($path_parts); $i++) { $part = $path_parts[$i]; $current_path .= '/' . $part; if (isset($breadcrumb_map[$part])) { $crumb = $breadcrumb_map[$part]; // Handle context-dependent titles if (isset($crumb['context_dependent']) && $crumb['context_dependent']) { $crumb['title'] = $this->get_contextual_title($part, $path_parts, $i); } // Add parent breadcrumb if specified if (isset($crumb['parent']) && !$this->breadcrumb_exists($breadcrumbs, $crumb['parent'])) { $parent_crumb = $this->get_parent_breadcrumb($crumb['parent']); if ($parent_crumb) { $breadcrumbs[] = $parent_crumb; } } // Determine URL $url = isset($crumb['url']) ? $crumb['url'] : home_url($current_path . '/'); // Don't add URL for the current page (last item) if ($i === count($path_parts) - 1) { $url = null; } $breadcrumbs[] = array( 'title' => $crumb['title'], 'url' => $url, 'position' => count($breadcrumbs) + 1 ); } } return $breadcrumbs; } /** * Get contextual title for context-dependent breadcrumbs * * @param string $part Current path part * @param array $path_parts All path parts * @param int $index Current index * @return string Contextual title */ private function get_contextual_title($part, $path_parts, $index) { if ($part === 'list') { // Look at previous part for context if ($index > 0) { $previous = $path_parts[$index - 1]; if ($previous === 'organizer') { return 'Organizer List'; } elseif ($previous === 'venue') { return 'Venue List'; } } return 'List'; } if ($part === 'edit') { return 'Edit'; } if ($part === 'manage') { // Look at previous part for context if ($index > 0) { $previous = $path_parts[$index - 1]; if ($previous === 'organizer') { return 'Manage Organizer'; } elseif ($previous === 'venue') { return 'Manage Venue'; } elseif ($previous === 'event') { return 'New Event'; } } return 'Manage'; } return ucfirst($part); } /** * Check if breadcrumb with given title already exists * * @param array $breadcrumbs Existing breadcrumbs * @param string $title Title to check * @return bool */ private function breadcrumb_exists($breadcrumbs, $title) { foreach ($breadcrumbs as $crumb) { if ($crumb['title'] === $title) { return true; } } return false; } /** * Get parent breadcrumb definition * * @param string $parent_title Parent title * @return array|null Parent breadcrumb data */ private function get_parent_breadcrumb($parent_title) { $parent_map = array( 'Events' => array( 'title' => 'Events', 'url' => '/trainer/dashboard/' ), 'Certificates' => array( 'title' => 'Certificates', 'url' => '/trainer/certificate-reports/' ), 'Customize' => array( 'title' => 'Customize', 'url' => '/trainer/profile/' ) ); if (isset($parent_map[$parent_title])) { return array( 'title' => $parent_map[$parent_title]['title'], 'url' => home_url($parent_map[$parent_title]['url']), 'position' => 1 ); } return null; } /** * Render breadcrumb HTML with Schema.org markup * * @param array $breadcrumbs Breadcrumb items * @param array $options Rendering options * @return string HTML output */ private function render_breadcrumb_html($breadcrumbs, $options) { if (empty($breadcrumbs)) { return ''; } $html = ''; return $html; } /** * Generate Schema.org JSON-LD markup for breadcrumbs * * @param array $breadcrumbs Breadcrumb items * @return string JSON-LD script tag */ private function generate_schema_markup($breadcrumbs) { $schema_items = array(); $position = 1; // Add home item $schema_items[] = array( '@type' => 'ListItem', 'position' => $position++, 'name' => 'Home', 'item' => home_url('/') ); // Add breadcrumb items foreach ($breadcrumbs as $crumb) { $item = array( '@type' => 'ListItem', 'position' => $position++, 'name' => $crumb['title'] ); if (!empty($crumb['url'])) { $item['item'] = $crumb['url']; } $schema_items[] = $item; } $schema = array( '@context' => 'https://schema.org', '@type' => 'BreadcrumbList', 'itemListElement' => $schema_items ); return ''; } }