ID, 'full' ); if ( $img_url ) { // We use the title to match the slide on the frontend $bg_data[] = array( 'title' => html_entity_decode(get_the_title($slide)), 'bg' => $img_url ); } } ?> format( 'Y-m-d' ); $site_param = isset( $_GET['hssm_site'] ) ? sanitize_text_field( wp_unslash( $_GET['hssm_site'] ) ) : ''; $show_past = isset( $_GET['hssm_past'] ) && $_GET['hssm_past'] === '1'; $slide_id = 0; if ( isset( $_GET['hssm_preview'] ) ) { $slide_id = absint( $_GET['hssm_preview'] ); } elseif ( isset( $_GET['hssm_slide'] ) ) { $slide_id = absint( $_GET['hssm_slide'] ); } if ( $slide_id ) { $slide = get_post( $slide_id ); if ( $slide && 'hssm_slide' === $slide->post_type ) { if ( empty( $_GET['hssm_date'] ) ) { $start_date = get_post_meta( $slide_id, '_hssm_start_date', true ); if ( $start_date && preg_match( '/^(\d{4}-\d{2}-\d{2})/', $start_date, $matches ) ) { $date_param = $matches[1]; } } if ( empty( $site_param ) ) { $site_terms = wp_get_post_terms( $slide_id, HSSM_Slides_CPT::SITE_TAXONOMY ); if ( ! is_wp_error( $site_terms ) && ! empty( $site_terms ) ) { $site_param = $site_terms[0]->slug; } } } else { $slide_id = 0; } } // Validate date (YYYY-MM-DD) $date_obj = DateTime::createFromFormat( 'Y-m-d', $date_param ); if ( ! $date_obj ) { $date_obj = $today; } return array( 'date' => $date_obj->format( 'Y-m-d' ), 'site_slug' => $site_param, 'show_past' => $show_past, 'slide_id' => $slide_id, ); } /** * Get available target sites from the hssm_site taxonomy. * * @return array */ function hssm_get_preview_sites() { // We specifically want only these three sites to appear, to match the main dashboard. // Also helps avoid duplicates if the taxonomy has similar terms. $allowed_slugs = array( 'hi-school', 'ace', 'one-stop' ); $terms = get_terms( array( 'taxonomy' => HSSM_Slides_CPT::SITE_TAXONOMY, 'hide_empty' => false, 'slug' => $allowed_slugs, ) ); if ( is_wp_error( $terms ) || empty( $terms ) ) { return array(); } $sites = array(); $added_slugs = array(); foreach ( $terms as $term ) { // Double check against duplicates just in case if ( in_array( $term->slug, $added_slugs, true ) ) { continue; } $sites[] = array( 'slug' => $term->slug, 'name' => $term->name, ); $added_slugs[] = $term->slug; } return $sites; } /** * Get calendar events (start/end dates) for highlighting. * * @param string $site_slug Optional site slug to filter by. * @return array Map of date => ['start', 'end'] */ function hssm_get_calendar_events( $site_slug = '' ) { $meta_query = array( 'relation' => 'OR', array( 'key' => '_hssm_start_date', 'compare' => 'EXISTS', ), array( 'key' => '_hssm_end_date', 'compare' => 'EXISTS', ), ); $tax_query = array(); if ( ! empty( $site_slug ) ) { $site_term = get_term_by( 'slug', $site_slug, HSSM_Slides_CPT::SITE_TAXONOMY ); if ( $site_term && ! is_wp_error( $site_term ) ) { $tax_query[] = array( 'taxonomy' => HSSM_Slides_CPT::SITE_TAXONOMY, 'field' => 'term_id', 'terms' => $site_term->term_id, ); } } if ( count( $tax_query ) > 1 ) { $tax_query['relation'] = 'AND'; } $args = array( 'post_type' => HSSM_Slides_CPT::POST_TYPE, 'post_status' => array( 'publish', 'future', 'pending' ), 'posts_per_page' => -1, 'fields' => 'ids', 'meta_query' => $meta_query, ); if ( ! empty( $tax_query ) ) { $args['tax_query'] = $tax_query; } $slide_ids = get_posts( $args ); $events = array(); foreach ( $slide_ids as $slide_id ) { $start_raw = get_post_meta( $slide_id, '_hssm_start_date', true ); $end_raw = get_post_meta( $slide_id, '_hssm_end_date', true ); if ( ! empty( $start_raw ) ) { $d = substr( $start_raw, 0, 10 ); if ( ! isset( $events[ $d ] ) ) $events[ $d ] = array(); if ( ! in_array( 'start', $events[ $d ], true ) ) $events[ $d ][] = 'start'; } if ( ! empty( $end_raw ) ) { $d = substr( $end_raw, 0, 10 ); if ( ! isset( $events[ $d ] ) ) $events[ $d ] = array(); if ( ! in_array( 'end', $events[ $d ], true ) ) $events[ $d ][] = 'end'; } } return $events; } /** * Query slides for a given date and optional site. * * @param string $date Date in YYYY-MM-DD format. * @param string $site_slug Optional site slug. * @return WP_Post[] */ function hssm_get_preview_slides_for_date( $date, $site_slug = '' ) { $meta_query = array( 'relation' => 'AND', array( 'relation' => 'OR', array( 'key' => '_hssm_start_date', 'value' => '', 'compare' => '=', ), array( 'key' => '_hssm_start_date', 'value' => $date, 'compare' => '<=', ), array( 'key' => '_hssm_start_date', 'compare' => 'NOT EXISTS', ), ), array( 'relation' => 'OR', array( 'key' => '_hssm_end_date', 'value' => $date, 'compare' => '>=', ), array( 'key' => '_hssm_end_date', 'compare' => 'NOT EXISTS', ), array( 'key' => '_hssm_end_date', 'value' => '', 'compare' => '=', ), ), ); $tax_query = array(); if ( ! empty( $site_slug ) ) { $site_term = get_term_by( 'slug', $site_slug, HSSM_Slides_CPT::SITE_TAXONOMY ); if ( $site_term && ! is_wp_error( $site_term ) ) { $tax_query[] = array( 'taxonomy' => HSSM_Slides_CPT::SITE_TAXONOMY, 'field' => 'term_id', 'terms' => $site_term->term_id, ); } } if ( count( $tax_query ) > 1 ) { $tax_query['relation'] = 'AND'; } $args = array( 'post_type' => HSSM_Slides_CPT::POST_TYPE, 'post_status' => array( 'publish', 'future', 'pending' ), 'posts_per_page' => -1, 'orderby' => 'meta_value_num', 'meta_key' => '_hssm_order', 'order' => 'ASC', 'meta_query' => $meta_query, ); if ( ! empty( $tax_query ) ) { $args['tax_query'] = $tax_query; } return get_posts( $args ); } $request = hssm_get_preview_request(); $sites = hssm_get_preview_sites(); $events = hssm_get_calendar_events( $request['site_slug'] ); $can_approve = current_user_can( 'edit_posts' ); $focused_slide = $request['slide_id'] ? get_post( $request['slide_id'] ) : null; if ( $focused_slide && 'hssm_slide' !== $focused_slide->post_type ) { $focused_slide = null; } $current_site_name = ''; if ( ! empty( $request['site_slug'] ) ) { foreach ( $sites as $site ) { if ( $site['slug'] === $request['site_slug'] ) { $current_site_name = $site['name']; break; } } } if ( empty( $current_site_name ) && ! empty( $sites ) ) { $current_site_name = __( 'All Sites', 'hi-school-slide-manager' ); } ?>

display_name ); ?>
post_status && $can_approve ) : $focus_start = get_post_meta( $focused_slide->ID, '_hssm_start_date', true ); $start_ts = $focus_start ? strtotime( $focus_start ) : false; $is_future = $start_ts && $start_ts > current_time( 'timestamp' ); ?>





ID === (int) $request['slide_id'] ) { $has_focus = true; break; } } if ( ! $has_focus ) { $focus_slide = get_post( $request['slide_id'] ); if ( $focus_slide && 'hssm_slide' === $focus_slide->post_type ) { array_unshift( $slides, $focus_slide ); } } } if ( empty( $slides ) ) : ?>

ID, '_hssm_subtitle', true ); $start_date = get_post_meta( $slide->ID, '_hssm_start_date', true ); $end_date = get_post_meta( $slide->ID, '_hssm_end_date', true ); $sites_terms = wp_get_post_terms( $slide->ID, HSSM_Slides_CPT::SITE_TAXONOMY ); $site_names = array(); if ( ! is_wp_error( $sites_terms ) && ! empty( $sites_terms ) ) { foreach ( $sites_terms as $term ) { $site_names[] = $term->name; } } $thumb_url = get_the_post_thumbnail_url( $slide->ID, 'thumbnail' ); ?>
post_status === 'pending' ) : ?>


post_status === 'pending' && $can_approve ) : ?>