Servantly Sermon Archive with YouTube Import and Live Detection
Changelog
2.1.11
Fix: Import post dates are now formatted in the site timezone instead of UTC. Version 2.1.10 capped future YouTube publish times to “now” but still wrote UTC clock values into post_date, which WordPress treats as local time — scheduling sermons hours later (e.g. an 11 AM import appearing as 6 PM). Capped dates use current_time(); past YouTube dates use wp_date().
2.1.10
Fix: YouTube live stream archives with a future publishedAt timestamp no longer create scheduled (future) WordPress posts. The post date is now capped to the current time at import, so sermons publish immediately instead of being held and published hours later via WP-Cron — which was causing SG Optimizer and other caching plugins to rebuild pages in an HTTP context and produce mixed-content warnings site-wide.
Fix: Added early X-Forwarded-Proto detection in the plugin bootstrap so is_ssl() returns correctly on reverse-proxy hosts (SiteGround, WP Engine, Cloudflare) during WP-Cron and other background requests.
2.1.9
New: Added screenshots 23–25 showing live stream states for the homepage hero and Watch Online page.
2.1.8
Fix: Improved copy on the WhoKnew Signal informational tab.
2.1.7
New: Added an optional informational tab introducing WhoKnew Signal™, a companion plugin for self-hosted web push notifications. The tab is hidden automatically when Signal Pro is installed with an active license.
2.1.6
Fix: purge_post_cache() was calling sg_cachepress_purge_cache() with no arguments and firing breeze_clear_all_cache on every single sermon save, which flushed the entire site cache (including the homepage) instead of only the saved sermon’s page. Both calls now pass the specific post URL so only that page is invalidated.
2.1.5
Fix: Saving a sermon’s speaker/book/series dropdown, meta description, or resource buttons (sermon notes, study guide, transcript) now automatically purges the page cache for that post across all major caching plugins (WP Rocket, W3 Total Cache, LiteSpeed Cache, WP Super Cache, SG Optimizer, Breeze, Cache Enabler, WP Engine). Changes are visible immediately without a manual admin cache flush.
Fix: Saving plugin settings that affect sermon page output (description style, layout, button labels, colour palette, scripture links) now triggers a full site cache flush automatically.
2.1.4
Fix: Restored background-size: cover and background-position: center to .servantly-card__thumb so server-rendered cards in the Most Recent Sermons strip continue to display thumbnails correctly.
2.1.3
Fix: Disabled the Load More button while a fetch is in progress so rapid clicks no longer get silently dropped, leaving the pagination stuck.
Fix: Switched sermon card thumbnails from CSS background-image to <img loading=”lazy”> so images off-screen are deferred by the browser instead of all firing simultaneously, which was causing images to fail silently on slower connections or after multiple Load More clicks.
2.1.2
Compatibility: Tested and confirmed compatible with WordPress 7.0.
2.1.1
Fix: Added Cache-Control: no-store response headers to the /sermons and /filters REST endpoints to prevent server-side and CDN caches (e.g. SiteGround SuperCacher) from storing empty responses and serving “No sermons found” to visitors.
Fix: Appended a timestamp parameter to all sermon archive AJAX requests so stale cached URLs are never reused by browsers or proxies.
Fix: Extended all description style CSS rules to also target .servantly-res-drawer__body so ccla-* and servantly-desc__* formatting applies correctly inside the resource drawer after it is portaled to <body>.
Fix: Removed an incorrectly inherited border-left green stripe from the resource drawer caused by the base description container styles being applied to the drawer context.
2.1.0
Feature: New Design tab in the plugin admin with selectable layout templates for all three public surfaces — single sermon page (Classic, Hero, Minimal, Sidebar), homepage hero shortcode (Classic, Split, Cinematic, Minimal), and sermon archive page (Grid, Magazine, List).
Feature: Extended CSS variable system — every color used by the plugin’s public output (typography, surfaces, badges, overlays, borders) is now driven by a CSS custom property. Hardcoded values have been removed throughout.
Feature: Per-element color customization. The Design tab exposes individual color pickers for all ~23 tokens (accents, backgrounds, surfaces, text, badge, overlay colors). The existing preset palette acts as a quick-start baseline; individual overrides layer on top without affecting any other tokens.
Feature: All layout choices and color overrides are global settings applied consistently across every sermon page — clean, predictable, and easy to manage.
Feature: Five sermon description display styles (Classic, Article, Summary, Minimal, Cards) selectable from the Design tab. The Article style ships a full set of semantic HTML helper classes (.servantly-desc__section-label, .servantly-desc__takeaways, .servantly-desc__takeaway, .servantly-desc__check, .servantly-desc__bullets, .servantly-desc__highlight) for structured, high-end sermon notes and summaries.
2.0.5
Improvement: Imported sermons now receive a clean, structured post excerpt instead of the raw YouTube description. The excerpt is assembled from the parsed sermon title, scripture reference, and speaker name when available. For non-sermon content (e.g. general video channels), the importer falls back to the first clean sentence of the description, then to the video title alone — always producing a meaningful excerpt for Yoast SEO, Open Graph, and meta descriptions rather than boilerplate YouTube text. Re-importing existing unlocked sermons also refreshes their excerpts; locked posts are never modified.
Feature: The Desc expandable row in Manage Sermons now includes an editable Meta Description field (plain text, 160-character max) that maps directly to the WordPress post excerpt. Saving the description row saves both fields together, giving administrators full control over what appears in Google search results and social sharing previews without leaving the plugin.
Feature: New Settings option “Meta description source” lets site owners choose between the structured sermon fields (default, recommended) or the raw YouTube description as the excerpt source on import. Individual sermons can always be overridden in the Desc row regardless of this setting.
2.0.4
Improvement: The homepage sermon hero ([servantly_latest_sermon]) now transitions out of “live” state dynamically — no page reload, no manual cache clearing required. When the stream ends, the hero smoothly restores the latest sermon title, thumbnail, scripture, and speaker using sermon data embedded in the page at render time. The live banner and countdown are always present in the HTML and toggled by JavaScript, eliminating the previous behavior where a full-page cache could keep the hero stuck showing “Streaming Live Now” until the cache was manually cleared.
2.0.3
Feature: All public-facing text on the archive page is now configurable via Settings — including the “Load More” button, “All Sermons” button, “Sermon Details” button, “Most Recent Sermons” heading, “Teaching Library” heading, sort option label, no-results message, and load error message. Enables use of the plugin for any content type beyond sermons.
2.0.2
Fix: Resources button arrow no longer overflows outside the button boundary on the Manage Sermons admin table.
Fix: Resources expandable row now opens correctly when the toggle button is clicked.
2.0.1
Fix: resolve taxonomy terms by ID before assignment so WordPress never creates duplicate speaker/book/series terms when the object cache is cold after an import purge.
Fix: add auto-merge duplicate terms utility to Bulk & titles admin tab (Tool 3) — scans all three sermon taxonomies and one-click merges exact-name duplicates into the canonical term.