/* v1.3.39 – öffentliche REST-Schnittstelle für ausgewählte Sound-of-Delight-Termine */ function daniel_live_soundofdelight_projects() { return [ 'The Acoustic Project', 'Unplugged Avenue', 'Die Zwei', ]; } function daniel_live_register_soundofdelight_rest_route() { register_rest_route('daniel-live/v1', '/soundofdelight-termine', [ 'methods' => WP_REST_Server::READABLE, 'callback' => 'daniel_live_soundofdelight_rest_terms', 'permission_callback' => '__return_true', ]); } add_action('rest_api_init', 'daniel_live_register_soundofdelight_rest_route'); function daniel_live_soundofdelight_rest_terms(WP_REST_Request $request) { $today = current_time('Y-m-d'); $allowed = daniel_live_soundofdelight_projects(); $query = new WP_Query([ 'post_type' => 'termin', 'post_status' => 'publish', 'posts_per_page' => 100, 'meta_key' => 'datum', 'orderby' => 'meta_value', 'order' => 'ASC', 'meta_query' => [ 'relation' => 'AND', [ 'key' => 'datum', 'value' => $today, 'compare' => '>=', 'type' => 'DATE', ], [ 'key' => 'projekt', 'value' => $allowed, 'compare' => 'IN', ], ], 'no_found_rows' => true, ]); $items = []; foreach ($query->posts as $post) { $post_id = $post->ID; $datum = get_post_meta($post_id, 'datum', true); $uhrzeit = get_post_meta($post_id, 'uhrzeit', true); $projekt = get_post_meta($post_id, 'projekt', true); $ort = get_post_meta($post_id, 'ort', true); $link = get_post_meta($post_id, 'termin_link', true); if (!in_array($projekt, $allowed, true)) continue; if (!$datum || !preg_match('/^\\d{4}-\\d{2}-\\d{2}$/', $datum)) continue; $items[] = [ 'id' => (int) $post_id, 'datum' => sanitize_text_field($datum), 'uhrzeit' => preg_match('/^\\d{2}:\\d{2}$/', $uhrzeit) ? sanitize_text_field($uhrzeit) : '', 'veranstaltung'=> html_entity_decode(get_the_title($post_id), ENT_QUOTES, 'UTF-8'), 'projekt' => sanitize_text_field($projekt), 'ort' => sanitize_text_field($ort), 'link' => $link ? esc_url_raw($link) : '', 'kalender_url' => esc_url_raw(daniel_live_calendar_url($post_id)), ]; } $response = rest_ensure_response([ 'updated' => current_time('c'), 'count' => count($items), 'termine' => $items, ]); $response->header('Cache-Control', 'public, max-age=300'); return $response; } https://daniel-drums.de/wp-sitemap-posts-page-1.xmlhttps://daniel-drums.de/wp-sitemap-posts-projekt-1.xmlhttps://daniel-drums.de/wp-sitemap-posts-termin-1.xmlhttps://daniel-drums.de/wp-sitemap-users-1.xml