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'; // 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, ); } /** * 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'] ); $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' ); } ?>





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' && current_user_can( 'edit_others_posts' ) ) : ?>