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' ) ) : ?>