Refactor: donate notice file kept as includes/class-donate-notice.php (preserves SVN file history); class remains Effortless_Donate_Notice.
1.0.38
Fix: donate notice now correctly displays on Network Admin pages — screen ID normalization strips WordPress’s -network/-user suffix before matching.
1.0.37
Refactor: donate notice class renamed Donate_Notice → Effortless_Donate_Notice (WP-standard prefix); file renamed to class-effortless-donate-notice.php. No phpcs:ignore needed anywhere.
1.0.36
Fix: donate notice now uses current_screen hook for reliable screen detection on single-site and multisite Network Admin pages.
1.0.35
Fix: donate notice now also hooks network_admin_notices so it appears on Network Admin pages (multisite).
1.0.34
Fix: donate notice now correctly reads the “Donate link” header using get_file_data() — get_plugin_data() does not parse that field, so the notice was silently not rendering.
1.0.33
Fix: VERSION constant corrected to match plugin header (was 1.0.31, header said 1.0.32).
Improvement: added dismissible donate notice on Timeline list and edit screens.
Improvement: added Donate link header field and includes/class-donate-notice.php (reusable across plugins).
1.0.32
WordPress 7.0 update
1.0.31
Fix: completed eltlp_ prefix rename — settings page HTML form attributes (id, name, for) and color-picker CSS class were still using etp_ prefix; all updated to eltlp_.
1.0.30
Security: replaced $_GET[‘post’] in admin_notices() with global $post object — no nonce required for a read-only post ID lookup.
Fix: renamed CPT to eltlp_timeline, taxonomy to eltlp_timeline_cat, shortcode to [eltlp_timeline], all option/transient keys to eltlp_ prefix, class to ELTLP_Timeline_Posts, constant to ELTLP_VERSION.
1.0.29
Fix: added inline phpcs:ignore on the constant and class declaration so Plugin Check suppresses PrefixAllGlobals warnings regardless of its prefix configuration.
1.0.28
Fix: constant renamed to EFFORTLESS_TIMELINE_POSTS_VERSION and class to Effortless_Timeline_Posts to match the slug-derived prefix that Plugin Check enforces.
1.0.27
Fix: renamed class to EffortLess_TimeLine_Posts; updated phpcs.xml to declare ELTLP_ and EffortLess_TimeLine_Posts_ as valid prefixes.
1.0.26
Fix: renamed version constant to ELTLP_VERSION and updated phpcs.xml to declare eltlp_/ELTLP_ as the canonical plugin prefix.
1.0.25
Fix: renamed constant ETP_VERSION → EFFORTLESS_TIMELINE_POSTS_VERSION and class EffortLess_Timeline_Posts → Effortless_Timeline_Posts to satisfy WordPress.NamingConventions.PrefixAllGlobals.
Code: added phpcs.xml with explicit prefix configuration so local PHPCS enforces the same rule.
1.0.24
Code: rewrote timeline-script.js to pass WordPress PHPCS standard (tabs, multi-line call formatting, @package tag, period-terminated inline comments).
1.0.23
Improvement: “Show Era Boundary” toggle — displays a styled divider line between BC and AD entries on the timeline.
Improvement: “Era Terminology” radio — choose BC/AD (traditional) or BCE/CE (modern). Applies to year labels and the divider.
1.0.22
Improvement: Settings > “Show Year Labels” toggle — uncheck to hide the year column and display a compact full-width timeline.
Improvement: any change to a plugin setting now automatically busts the shortcode transient cache.
1.0.21
Improvement: year field now accepts BC dates (-9999 to 9999). Enter -2580 for 2580 BC.
Improvement: BC years display as “2580 BC” on the timeline and in admin columns.
Fix: negative years were stripped to positive by absint(); now uses intval() to preserve sign.
Fix: sort timestamp falls back to year × 31 557 600 when strtotime() cannot parse ancient dates.
1.0.20
Improvement: “Show Today” toggle in Settings — displays a hollow marker at today’s date position, sorted correctly among all entries. Works even with no real entries. Bypasses transient cache while active.
1.0.19
Fix: entries dated exactly 1970 (Unix epoch, timestamp = 0) were incorrectly filtered out and never displayed.
1.0.18
Improvement: added Settings page under Timeline menu with shortcode reference (all attributes, defaults, examples) and existing categories with ready-to-use shortcodes.
Improvement: color pickers on Settings page let admins change the timeline line color and dot color without editing CSS.
1.0.17
Fix: replace named global function in uninstall.php with call_user_func closure to eliminate global namespace warnings.
1.0.16
Fix: wrap uninstall logic in a prefixed function to avoid global variable scope warnings.
1.0.15
Fix: removed load_plugin_textdomain() — WordPress auto-loads translations since 4.6.
Fix: prefixed global variables in uninstall.php to avoid namespace collisions.
Fix: added phpcs:ignore for the_content core hook (not a custom hook).
Fix: updated “Tested up to” to WordPress 6.9.
1.0.14
Improvement: CSS and JS now load only on pages that use the [timeline] shortcode.
Improvement: activation and deactivation hooks flush rewrite rules so CPT slugs work immediately.
Improvement: added uninstall.php to clean up plugin meta keys and transients on deletion.
Improvement: meta fields registered via register_post_meta() for REST API and block editor access.
Improvement: shortcode output cached with transients; cache busts automatically on save or delete.
Improvement: recursion guard prevents infinite loop if [timeline] appears in an entry’s content.
Improvement: new heading shortcode attribute (h2–h6) for correct document outline control.
Improvement: timeline wrapper gets role=”region” and aria-label; marker gets aria-hidden; articles get aria-label.
Improvement: admin notices shown when date/year fields are silently cleared by validation.
Improvement: featured image (thumbnail) added to CPT supports.
Improvement: menu_position changed from 5 (conflicts with Posts) to 20.
Improvement: generated languages/effortless-timeline-posts.pot for translators.
1.0.13
Security: validate year_only as integer clamped to 1900–2100 (server-side).
Security: reject full_date/end_date that don’t match YYYY-MM-DD format.
Fix: format_date() returns empty string instead of “January 1, 1970” for invalid dates.
Fix: correct phpcs:ignore sniff name on virtual stylesheet handle.
1.0.12
Fix: allowlist _date_type values to prevent arbitrary meta storage.
Fix: guard strtotime() return value before writing timestamp/year meta.
Fix: apply category filter before limit so limit counts filtered results.
Fix: admin sort direction now respects the URL order parameter.
Fix: shortcode output wrapped in .timeline-dotcom container (CSS max-width was broken).
Fix: prime post meta cache before loop (single DB query instead of N×6).
Fix: load plugin textdomain so translations work.
Fix: move meta box inline CSS and JS to properly enqueued handles.
Fix: use ETP_VERSION constant for asset versioning.
1.0.11
Code: fix all PHPCS WordPress standard violations (tabs, alignment, short ternary, globals, comment style).