// ========================================================================= // 8. SHORTCODE: Team Development Camp Roster - /development-camp/ // ========================================================================= add_shortcode('dev_camp_roster_full', 'render_dev_camp_roster_full'); function render_dev_camp_roster_full() { global $wpdb; // 1. Handle Year Selection via GET parameter (default to max prospect/dev camp year if not set) $available_years = $wpdb->get_col("SELECT DISTINCT camp_year FROM otg_camp_roster WHERE camp_type = 'Prospect' ORDER BY camp_year DESC"); $latest_year = isset($_GET['camp_year']) ? intval($_GET['camp_year']) : 0; if (!$latest_year || !in_array($latest_year, $available_years)) { $latest_year = !empty($available_years) ? intval($available_years[0]) : intval($wpdb->get_var("SELECT MAX(camp_year) FROM otg_camp_roster WHERE camp_type='Prospect'")); } if (!$latest_year) { return "No development camp data found."; } // Retrieve Development Camp Settings by matching the first 4 characters of season to $latest_year $camp_settings = $wpdb->get_row($wpdb->prepare( "SELECT season, dev_start, dev_end, dev_location FROM otg_rangers_season_settings WHERE LEFT(season, 4) = %s LIMIT 1", $latest_year )); $dev_camp_dates_str = ''; $start_date_obj = null; $end_date_obj = null; if ($camp_settings && !empty($camp_settings->dev_start) && !empty($camp_settings->dev_end)) { $start_date_obj = new DateTime($camp_settings->dev_start); $end_date_obj = new DateTime($camp_settings->dev_end); $start_month = $start_date_obj->format('F'); $end_month = $end_date_obj->format('F'); if ($start_month === $end_month) { $dev_camp_dates_str = $start_date_obj->format('F j') . '-' . $end_date_obj->format('j'); } else { $dev_camp_dates_str = $start_date_obj->format('F j') . ' - ' . $end_date_obj->format('F j'); } if (!empty($camp_settings->dev_location)) { $dev_camp_dates_str .= '
Location: ' . $camp_settings->dev_location; } } // Check which camp types actually exist for this selected year to conditionally display navigation links $has_training = (intval($wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM otg_camp_roster WHERE camp_year = %d AND camp_type = 'Training'", $latest_year))) > 0); $has_rookie = (intval($wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM otg_camp_roster WHERE camp_year = %d AND camp_type = 'Rookie'", $latest_year))) > 0); $has_dev = (intval($wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM otg_camp_roster WHERE camp_year = %d AND camp_type = 'Prospect'", $latest_year))) > 0); $positions = ['Forward', 'Defenseman', 'Goaltender']; $target_date = new DateTime('2026-06-29'); // Start output wrapper constrained to 100% width, max-width 1800px, and left-justified matching stats browser $output = '
'; // Top Navigation & Filter Bar (Camp Type Switcher + Year Dropdown Selector) $output .= '
'; // Camp Type Navigation Links $output .= '
'; $output .= 'Camp View:'; if ($has_dev) { $dev_url = esc_url(add_query_arg('camp_year', $latest_year, home_url('/development-camp/'))); $output .= 'Development Camp'; } if ($has_rookie) { $rookie_url = esc_url(add_query_arg('camp_year', $latest_year, home_url('/rookie-camp/'))); $output .= 'Rookie Camp'; } if ($has_training) { $training_url = esc_url(add_query_arg('camp_year', $latest_year, home_url('/training-camp/'))); $output .= 'Training Camp'; } $output .= '
'; // Year Selector Dropdown Form if (!empty($available_years)) { $output .= '
'; $output .= ''; $output .= ''; $output .= '
'; } $output .= '
'; // Header Section (Updated to match training camp layout format) $output .= '
'; $output .= '
Development Camp Roster: ' . $latest_year . '
'; if (!empty($dev_camp_dates_str)) { $output .= '
Development Camp Dates:
' . $dev_camp_dates_str . '
'; } $output .= '
'; // Top Section Grid for Related Posts $output .= '
'; $output .= '
'; // Related WordPress Posts Section (Tag name matching: e.g., "2025 Development Camp") $camp_posts = get_posts(array( 'post_type' => 'post', 'posts_per_page' => 5, 'tax_query' => array( array( 'taxonomy' => 'post_tag', 'field' => 'name', 'terms' => $latest_year . ' Development Camp', ), ), 'post_status' => 'publish' )); if (!empty($camp_posts)) { $output .= '
'; $output .= '
Related Development Camp News & Updates
'; $output .= '
    '; foreach ($camp_posts as $post) { setup_postdata($post); $post_url = get_permalink($post->ID); $post_title = get_the_title($post->ID); $post_date = get_the_date('F j, Y', $post->ID); $output .= '
  • '; $output .= '' . esc_html($post_date) . ''; $output .= '' . esc_html($post_title) . ''; $output .= '
  • '; } $output .= '
'; $output .= '
'; wp_reset_postdata(); } $output .= '
'; $output .= '
'; // Close Top Section Grid // Styles matching modern uniform layout $output .= ''; foreach ($positions as $pos) { $display_pos = ($pos == 'Defenseman') ? 'Defensemen' : $pos . 's'; $output .= '
' . $display_pos . '
'; $players = $wpdb->get_results($wpdb->prepare( "SELECT * FROM otg_camp_roster WHERE camp_year = %d AND camp_type = 'Prospect' AND position = %s ORDER BY player_name ASC", $latest_year, $pos )); $h_goals_wins = ($pos === 'Goaltender') ? 'W' : 'G'; $h_assists_losses = ($pos === 'Goaltender') ? 'L' : 'A'; $h_pts_ot = ($pos === 'Goaltender') ? 'OT' : 'PTS'; $h_pim_gaa = ($pos === 'Goaltender') ? 'GAA' : 'PIM'; $output .= ''; if (empty($players)) { $output .= ''; } else { foreach ($players as $p) { $clean_jersey = ltrim($p->jersey_number, '#'); $name = $p->id ? '' . esc_html($p->player_name) . '' : esc_html($p->player_name); $birthdate = !empty($p->birthdate) ? new DateTime($p->birthdate) : null; $age = $birthdate ? $target_date->diff($birthdate)->y : ''; // Calculate GAA for goalies, PIM for skaters $stat_five = ($pos === 'Goaltender') ? number_format($p->pim / 100, 2) : $p->pim; $output .= ''; } } $output .= '
Player #HtWt HandBirthdateAge Team Birthplace Country GP' . $h_goals_wins . ' ' . $h_assists_losses . ' ' . $h_pts_ot . ' ' . $h_pim_gaa . '
No players found for this position.
' . $name . ' ' . esc_html($clean_jersey) . ' ' . esc_html($p->height) . ' ' . esc_html($p->weight) . ' ' . esc_html($p->hand) . ' ' . esc_html($p->birthdate) . ' ' . esc_html($age) . ' ' . esc_html($p->team_name) . ' ' . esc_html($p->birth_city) . ' ' . esc_html($p->country) . ' ' . esc_html($p->gp) . ' ' . esc_html($p->goals) . ' ' . esc_html($p->assists) . ' ' . esc_html($p->points) . ' ' . esc_html($stat_five) . '
'; } $output .= '
'; // Close main wrapper return $output; } Fish – Activity – OutsideTheGarden Boards – Page 34
FEBRUARY
«
Fri
30
Sat
31
Sun
1
Mon
2
Tue
3
Wed
4
Thu
5
»
Fish
Fish
Group: Moderator
Joined: 2023-08-22
Title: Member Moderator
3
Follow
VERY rusty in his first game of the season, I think we'll ha...

In forum Where Smit Hits The Fan

2 years ago
Yeah, he's not a great fit for the Rangers with his size and...

In forum Where Smit Hits The Fan

2 years ago
Just his second career 3v3 shift...so yeah

In forum Where Smit Hits The Fan

2 years ago
Mr Kraken ices the game and Jack Hughes with the OT turnover

In forum Where Smit Hits The Fan

2 years ago
This

In forum Where Smit Hits The Fan

2 years ago
Or in the Rangers case...get on the PP

In forum Where Smit Hits The Fan

2 years ago
Ah Vinnie....shoots high on a 2 on 0 shorthanded

In forum Where Smit Hits The Fan

2 years ago
Well staying out of the penalty box appears to be an importa...

In forum Where Smit Hits The Fan

2 years ago
Well, there you go...1-0 Rangers

In forum Where Smit Hits The Fan

2 years ago
Too many Eunuchs?

In forum Where Smit Hits The Fan

2 years ago
Too many men penalty...a really late call

In forum Where Smit Hits The Fan

2 years ago
Rempe in, Kaliyev in, Shesterkin back Vesey out, Chytil ou...

In forum Where Smit Hits The Fan

2 years ago
Not sure Drury is an all skill kind of guy, I think that was...

In forum Where Smit Hits The Fan

2 years ago
Chytil back at practice

In forum Where Smit Hits The Fan

2 years ago
Josh Yohe (who covers the Penguins), claims the NYR offered ...

In forum Where Smit Hits The Fan

2 years ago
Page 34 / 245