You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This adds a Theme Calendar page type: the definitive calendar for a topic, for example "AI Conferences 2026 & 2027". It lists Linux Foundation events alongside third-party External Events that share an Event Category. To help fill those calendars, admins get a guided tool: it generates a research prompt for Claude Desktop, then imports Claude's JSON results as draft External Events for review. The PR also consolidates schema.org Event JSON-LD into one pipeline and extends it to the existing Search & Filter calendar pages.
An LF event whose end date is blank is never removed by this fallback, even after its start date has passed. End dates are optional in the editor, and the existing has_ended() logic elsewhere explicitly falls back to the start date, so stale events can remain on theme calendars when the lazily updated passed flag is absent. Use the start date as the effective end date when no valid end date exists.
This issue also appears on line 715 of the same file.
Validate optional CFP dates before determining status
These CFP dates are optional free-text fields. When a start is present but the end is blank, strtotime( '' ) is false, so this branch reports the CFP as Closed; malformed values can also reach new DateTime() below. Validate both dates and show “Details Coming Soon” unless both are usable.
Hybrid events are classified as mixed only when city is populated, even though the new editor and card allow a physical location to consist of a country (or other place fields). Such events are emitted as online-only and lose their physical Place in the structured data. Base this decision on any populated physical-location data.
Avoid HTML-escaping values before JSON-LD serialization
These values are being HTML-escaped before being serialized as JSON-LD. JSON parsers do not decode HTML entities, so titles such as A & B become literal A & B, and URLs with multiple query parameters contain &, corrupting the schema data. Keep text/URLs in their raw sanitized forms and make both script emitters use wp_json_encode with the JSON_HEX flags so script embedding remains safe.
Expire LF events with missing end dates using start date
The missing-end-date case is also unhandled for LF events: the normalizer and schema support a valid start with no valid end, but this check then never expires it. Since the lazy lfes_event_has_passed flag is not updated for incomplete date ranges, that event can remain in the upcoming calendar indefinitely; use the start date as the effective end.
Use start date when external event end date is missing
The query explicitly includes records with a blank or missing end date, but this loop never falls back to the start date when deciding whether they have passed. A single-day external event saved with only date_start therefore remains in every upcoming theme calendar indefinitely, despite the schema already treating a missing end as equal to the start.
- Implemented LFEvents_CLI class for WP-CLI commands to discover external events and show discovery status.
- Created LFEvents_LiteLLM_Client class to handle communication with LiteLLM API, including chat completions and model management.
- Updated LFEvents class to include new LiteLLM client and agent discovery functionalities.
- Enhanced admin settings page to configure LiteLLM options and provide tools for testing connections and running event discovery.
- Added logging and reporting for discovery runs, including error handling and user notifications.
Signed-off-by: Chris Abraham <cjyabraham@gmail.com>
Theme Calendars also query LF Event post types, but the new invalidation hook only covers External Events. Changes to an LF event’s title, dates, location, or category will not purge calendar pages that include it, leaving their cached cards and JSON-LD stale. Register equivalent invalidation for saves and taxonomy changes on lfe_get_post_types() events.
- Included the LFEvents_External_Import class for managing external event imports.
- Registered meta fields and admin menu for the external import tool.
Signed-off-by: Chris Abraham <cjyabraham@gmail.com>
These values are data inside JSON-LD, not HTML output. esc_html() leaves names such as Cloud & AI as the literal Cloud & AI, while display-context esc_url() turns query separators into &, producing an incorrect event URL. Sanitize the data without HTML entity encoding before JSON serialization.
Unknown external organizers incorrectly attributed to Linux Foundation
An External Event is allowed to have no organizer, but this fallback then identifies The Linux Foundation as its organizer in JSON-LD. That publishes false attribution for third-party events; omit organizer when an external organizer is unknown and reserve the LF fallback for LF Events.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Example calendar
This adds a Theme Calendar page type: the definitive calendar for a topic, for example "AI Conferences 2026 & 2027". It lists Linux Foundation events alongside third-party External Events that share an Event Category. To help fill those calendars, admins get a guided tool: it generates a research prompt for Claude Desktop, then imports Claude's JSON results as draft External Events for review. The PR also consolidates schema.org Event JSON-LD into one pipeline and extends it to the existing Search & Filter calendar pages.