ICS Calendar


Using a simple shortcode, you can turn any iCalendar subscription (ICS) feed (Google Calendar, Microsoft Office 365, Apple iCloud, Airbnb, Vrbo, and many more) into a seamlessly integrated, auto-updating, zero-maintenance WordPress calendar.

Continue to manage your events in the calendar software you’re already using! You’ll automatically have an up-to-date calendar in your WordPress website with no extra work.

Display your calendar in month, list or week view. Many additional customization options are available. See our User Guide for full details.

No API keys required!

Works with ANY calendar software that generates a public iCalendar subscription link.

Live Preview

You can preview your own calendar in any ICS Calendar view at our website: icscalendar.com/preview

Shortcode Builder

We’ve made it easier than ever to get started using ICS Calendar with our new online shortcode builder: icscalendar.com/shortcode-builder

Language Support

All date strings (days of the week, months, etc.) are automatically translated into your site’s configured language (under Settings > General > Language) and date/time formats using core WordPress functionality. All text content for the calendar itself is displayed as-is from the feed.

The small amount of additional front-end displayed text generated by the plugin defaults to U.S. English, but also supports the following translations: Chinese, Danish, Dutch, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Japanese, Korean, Latvian, Lithuanian, Norwegian, Polish, Portuguese, Russian, Spanish and Swedish.

Please contact us if you would like us to add support for your language!

This plugin includes the PHP ICS Parser library by Jonathan Goode, John Grogg and Martin Thoma (MIT license).


Once the plugin is installed and activated, use the shortcode below (adding your own ICS feed URL between the quotation marks) to insert a calendar into your pages. Use our online Shortcode Builder to easily create a customized shortcode, or consult the User Guide for more information.

[ics_calendar url=""]

Be sure you are using the iCalendar subscription (ICS) URL (i.e. for importing into a calendar program), not the URL for viewing a calendar in a web browser. To test if you have the correct URL, paste it directly into your browser address bar. It should download an .ics file, not display the calendar in the browser.


How do I find my calendar’s ICS feed URL?

Different calendar systems have different ways to obtain the feed URL. You may need to consult your calendar software’s documentation for assistance. Find instructions for commonly used calendars below.

You will also need to make sure that your calendar is public. Private calendars cannot be accessed by this plugin.

Documentation quick links:

How do I insert a calendar into my page?

Use this shortcode, inserting your ICS feed URL between the quotation marks:

[ics_calendar url=""]

Be sure you are using the iCalendar subscription (ICS) URL (i.e. for importing into a calendar program), not the URL for viewing a calendar in a web browser. To test if you have the correct URL, paste it directly into your browser address bar. It should download an .ics file, not display the calendar in the browser.

Can I combine multiple calendars?

Yes! You can combine multiple calendars by including more than one feed URL in the url parameter. Separate the calendar URLs with one space or a pipe | character. Do not include any other delimiter characters, as they will be interpreted as part of the URL.

Why isn’t my calendar loading?

This may be due to your server’s configuration. This plugin requires either the PHP cURL extensions, or the allow_url_fopen PHP setting to be turned on. Check your PHP configuration or your server administrator if you think this may be the issue. You can also add debug="true" to your shortcode and view your page to see debugging output which may provide additional details about any connection issues.

Why isn’t my calendar updating?

For performance, this plugin uses WordPress transients to store retrieved calendar data for one hour between requests to the calendar source server. If you have updated events that are not showing up in your page, visit the ICS Calendar page in your site admin and click the Clear Cached Calendar Data button.

Third-party caching plugins may interfere with ICS Calendar’s feed syncing. If you are using a caching plugin and your calendar is not updating, try using the AJAX option in your shortcode.

Why are event times an hour off after Daylight Saving Time begins?

PHP has two different ways of defining timezones: as a number of hours offset from GMT/UTC (e.g. “UTC-5”), or as a continent/city combination (e.g. “America/Chicago”). Timezones using UTC offsets do not handle Daylight Saving Time correctly (as noted in the PHP documentation). Please check your WordPress timezone settings (Settings > General > Timezone). If it is set to a UTC offset, change it to the city closest to your location, in the same timezone. As of version 6.0 you can also set the timezone within the shortcode using the tz parameter. (Again, be sure to use a named region/city timezone, not a UTC offset.)

Additional documentation and support

Our User Guide includes extensive documentation of all features of the plugin, is frequently updated, and is translated into all languages supported by the plugin.

Feature requests

The paid ICS Calendar Pro add-on includes additional layout options, tools for customizing the calendar’s appearance more easily than directly editing CSS, an improved insertion tool, and more. We are also constantly adding new features and refinements to both the free and paid versions. If you have suggestions for features you’d like to see or any other additional input, please let us know by following the support link on the admin page or in the WordPress support forums! The base plugin will always be free to use.


❄️2️⃣ 16, 2024
Lots of functionality in the free version, intuitive, and the plugin author responds in support forum. Can't ask for much more than that. Thank you!
🍂 1️⃣1️⃣ 21, 2023
I've been wanting to use an embedded Google Calendar in our nonprofit's website so volunteers could update the info but it's just too plain and ugly. ICS Calendar solves that and the free version has plenty of options for us. Upgrade to Pro is very reasonable but I can't find a reason why we would need that. Thanks to the devs!
🍂 1️⃣1️⃣ 6, 2023
Out of the box the plugin looked and functioned amazingly without the need to too much additional styling. Developing the shortcodes was very easy and great options for various configurations. Their support team has been extremely responsive and very helpful to get us up and running. I highly recommend!
July 14, 2023
The best thing about this plugin is not how easy it is to use, nor how well it works, but the support offered by its creators.It's great!
☀️ 6️⃣ 29, 2023 4 replies
Works fine, the biggest Problem was the cache settings and the understanding in google calendar with public/private events. Can recommend. Regarding GDPR it would be great to inform, if any additional information is needed that need's to be listed when using this plugin Edit: thanks for the instant reply, there is no data collected
Read all 59 reviews

Contributors & Developers

“ICS Calendar” is open source software. The following people have contributed to this plugin.


“ICS Calendar” has been translated into 6 locales. Thank you to the translators for their contributions.

Translate “ICS Calendar” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog – 2024.02.06

  • JavaScript:
    • Replaced wp_localize_script() with the now-preferred wp_add_inline_script() in R34ICS::enqueue_scripts() method. Fixes an issue where the “localized” script was not actually rendering in the page in some situations.
    • Modified logic that hides “Show past events” on mobile month/week views, when there are no past events in the current month, to account for the .month_list_all class (an ICS Calendar Pro-only feature).

10.14.1 – 2024.01.25

  • Added Remove “Add ICS Calendar” button in Classic Editor admin option to leverage the existing r34ics_display_add_calendar_button action without the need for custom PHP code.
  • Added r34ics_purge_calendar_transients action to allow external cleanup functions to fire off on the Clear Cached Calendar Data utility.
  • JavaScript: added type casting to r34ics_boolean_check() function to prevent occasional AJAX loading errors.
  • i18n: New translation strings.

10.14.0 – 2024.01.11

  • AJAX:
    • Encapsulated AJAX client-side logic in a new r34ics_ajax_init() function, and added r34ics_ajax_start and r34ics_ajax_end events.
    • Two changes to address the issue of AJAX requests occasionally outputting only “1” instead of the calendar:
    1. Added a check on the R34ICS::display_calendar() method for transient data containing only “1” instead of the calendar, bypassing the transient cache if true.
    2. Added handling to the AJAX output itself to suppress display of the “1” if it still occurs, and write an error message to the console. We are still investigating the root cause of this issue.
  • JavaScript:
    • Added JavaScript version of r34ics_boolean_check() function.
  • List view:
    • Added text underline to events that have a clickable description when the toggle option is turned on, to give users a visual cue. – 2023.12.16

  • AJAX: Replaced FILTER_SANITIZE_STRING, deprecated in PHP 8.1, with a new sanitization method, and added conditional to prevent processing the AJAX output if URL is missing.

10.13.1 – 2023.12.08

  • Basic view:
    • Switched event layouts to use CSS flexbox instead of float, to address issues where long event titles may force all text to wrap below the date block.
    • Additional minor CSS adjustments.
  • Month view:
    • Added “Today” link to header navigation. Requires monthnav to be set to an option that includes the previous/next arrows (all except the default select).
    • Fixed bug that would prevent “Show past events” link from appearing in mobile breakpoint under certain conditions.
  • i18n: Added new translation strings. – 2023.12.04

  • Added missing logic to turn off caching if debug="3" is set; refactored logic for setting reload value.
  • Adjusted CSS for event hover effects to improve performance in some views in the Pro version.
  • Narrowed jQuery selector scope for pagination logic in List and Basic views, to fix a conflict with some views in the Pro version. – 2023.11.28

  • Fixed a display bug introduced in v.10.13.0 that would cause broken HTML code to appear directly on the page for some sites. (The default values for the new htmltageventtitle and htmltageventdesc parameters were not being set correctly for sites with the Use new parameter defaults (v.10.6) setting turned off.)
  • Renamed new r34ics_filter_allowed_heading_tags() function to r34ics_allowed_heading_tags_check(), since it’s not technically a filter.
  • Hotfix: Added .event-info wrapper element in Basic view to prevent longer event descriptions from wrapping below the floating date block element.

10.13.0 – 2023.11.27

  • New Features:
    • Added new “Basic” view. Use view="basic" in your shortcode. This is a variant of List view that does not group events by date/month. By default, the date of each event is displayed in a prominent date box. For a “true” basic view, also add nostyle="true" to your shortcode. This view supports most of the same parameters (and associated functionality) as List view, including count, pagination, color, eventdesc and toggle.
    • All views: Added <span> wrapping of date elements (day of week, month, day number, year, etc.) with a new data-date-format attribute on each tag. Allows for custom styling of the components of a date. This feature is used for the date boxes in the new Basic view, but also allows for custom styling of List view.
  • New shortcode parameters:
    • htmltageventdesc: Sets the HTML tag used for the .eventdesc element on events.
    • htmltageventtitle: Sets the HTML tag used for the .title element on events.
    • htmltagtime: Sets the HTML tag used for the .time element.
    • nostyle: Turns off most of Basic view’s default HTML styling for a “true” basic view that you can customize with your own CSS. (Currently has no effect on any other views.)
  • New filter:
    • r34ics_display_add_calendar_button: Use with the __return_false function to turn off the “Add ICS Calendar” button in Classic Editor.
  • Functionality changes:
    • The paginationposition parameter in List and Basic views now defaults to above rather than below.
    • Minor code refactoring in templates/calendar-list.php and functions.php.

10.12.2 – 2023.11.13

  • Admin Utilities:
    • Removed raw data output from ICS Feed URL Tester utility.
    • Minor refactoring of r34ics_system_report() function.
  • Security:
    • Streamlined URL validation code added in v. to remove redundant custom logic, and instead rely on the WP core [wp_http_validate_url()](https://developer.wordpress.org/reference/functions/wp_http_validate_url/) function. This change also adds the ability for site developers to use the [http_request_host_is_external](https://developer.wordpress.org/reference/hooks/http_request_host_is_external/) filter to selectively grant access to specific internal network URLs, e.g. for retrieving ICS feeds from locally hosted mail/calendar servers.
    • Restricted debugging data collection to users with the Administrator role, and removed raw retrieved URL data from all debugging tools.
  • i18n:
    • Updated translation strings.
  • Vendors:
    • Updated ICS Parser library to 3.3.1 (with modified namespace, as usual, to avoid plugin conflicts).

10.12.1 – 2023.11.06

  • Bug fix: Corrected CSS logic for combinemultiday that would incorrectly display event titles if site’s Week starts on value was anything other than Sunday.
  • CSS: Tweaks to compact in Month and Week views.
  • Hooks: Added r34ics_eventdesc_include_time_and_title filter. This allows for additional external conditionals to determine whether or not the time and title for events should be included in the .eventdesc element.
  • Misc: Removed a few redundant lines of code. – 2023.10.30

  • Added an extra security check for extremely rare conditions where the security fix added in versions and may not have been adequate. This fix has been backported to all earlier affected versions of the plugin in the repository. – 2023.10.24

  • Critical bug fix: Addresses an additional condition of the same issue first addressed in This is not a second bug, rather a more thorough and effective solution to the same bug. This fix has been backported to all earlier affected versions of the plugin in the repository.
  • Minor code refactoring. – 2023.10.23

  • Critical bug fix: Addresses a security issue identified in earlier versions of the plugin. Per best practices we are not identifying the specific details of the issue or the fix. This fix has been backported to all earlier affected versions of the plugin in the repository.
  • Removed unnecessary retrieval of /etc/issue file contents from r34ics_system_report() function. (This is unrelated to the critical bug fix noted above.) – 2023.10.16

  • Bug fix: Added stopPropagation() to jQuery logic for toggle feature. The modified selector added in version 10.12.0 was inadvertently causing the code to run twice (instantly re-closing the toggle) when clicking on the event title itself.

10.12.0 – 2023.10.06

  • a11y: Added tabindex="0" to all events and corresponding CSS changes to make event hover descriptions tab-accessible. Note: We are still troubleshooting some issues with tabbing to links contained within the description block. However, we are releasing this feature as-is due to the immediate accessibility improvements it can offer.
  • Developer: Removed deprecated filter names.

10.11.6 – 2023.10.03

  • Parser: Added automatic support for Microsoft Outlook X-ALT-DESC as primary event description, falling back to standard DESCRIPTION field if X-ALT-DESC is not present.
  • i18n: Swedish translation updates. – 2023.09.11

  • Admin: Added post_max_size and upload_max_filesize to PHP Settings section of System Report.
  • CSS: Fixed issue of week numbers wrapping in certain themes.
  • i18n: Updated translation files and resolved some inconsistencies.
  • List view: Added missing support for timeformat setting on multi-day event headings. – 2023.07.27

  • Patched embedded ics-parser library with new version that incorporates changes mentioned in notes for v. 10.11.3 below, along with some additional fixes that may have caused correctly calculated final recurrences from appearing.

10.11.5 – 2023.07.12

  • List view:
    • Fixed event description excerpt appearing in lightbox (in addition to full description).
    • Fixed missing times on multi-day events with start and/or end times.
    • Fixed redundant dates/title on multi-day events.
  • Mobile breakpoint:
    • Bug fix: Event titles and times appearing twice on mobile breakpoint when nomobile is used.
    • New feature: Changed options for compact parameter to support mobile and desktop as well as the previous boolean options. (Allows for CSS modifications that only apply to mobile or desktop breakpoints.) Use compact="mobile" along with nomobile="true" with month view to get a smaller table-based month layout on mobile devices. This feature is still considered “experimental” and is subject to change; your feedback is welcomed!
  • Bumped “Tested up to” to 6.2.

10.11.4 – 2023.07.05

  • Added logic to collapse full day name headers to “short” abbreviated versions on mobile for table-based views.

10.11.3 – 2023.06.21

  • Improvements:
    • Added r34ics_raw_feed_strip_embedded_images() function to automatically strip embedded images (e.g. <img src="data:image/...">) from event descriptions. In practice these have not been rendering properly, and they can potentially introduce a large enough explosion of the ICS data array size to cause PHP out of memory fatal errors. This new function runs on the r34ics_display_calendar_preprocess_raw_feed filter, to reduce the data size very early in the process, prior to initial parsing.
    • Refactored R34ICS::_url_get_contents() method with additional HTTP headers, improved user agent string handling, and support for compressed feeds. Specifically designed to address an issue with Kayak, however this may also resolve issues with some other hosts.
  • Deprecation:
    • Removed workaround code in deprecated r34ics_url_get_contents() function.
  • Bug fixes:
    • Identified and patched a bug in the ics-parser library that causes stray erroneous instances of recurring events if their condition has no match in a given month. (For example, an event that recurs every 5th Saturday, in months that do not have a 5th Saturday, was appearing incorrectly near the beginning of the month.)
  • Vendors:
    • Updated embedded ics-parser library to v. 3.2.1 (carrying over existing modifications).
    • Removed extraneous files from embedded ics-parser.
  • i18n:
    • Updated Korean translation strings. Thanks to @modelaid 한호성 for providing the new translations!
  • Miscellaneous:
    • Updated debugging output for cURL connections.

10.11.2 – 2023.05.09

  • Miscellaneous:
    • Removed extraneous r34ics_purge_cache item from System Report and debug data.
  • i18n:
    • Added support for G.i in r34ics_time_format() function.
    • Added Slovenian translation. (Thanks, Peter!)

10.11.1 – 2023.04.29

  • Bug fixes:
    • Fixed bug caused by changed shortcode defaults (generating dynamic values for guid and startdate) which was preventing ICS Calendar caching from functioning properly. The issue would cause an explosion of separate transient entries in the wp_options data table.
  • Miscellaneous:
    • Added warning on the admin page not to post the System Report in the WordPress Support Forums.
    • Removed header as an allowed tag in the r34ics_allowed_heading_tags() function used with the htmltagtitle, htmltagmonth and htmltagdate parameters because it was not a logical inclusion for this purpose. The accepted values are now h2, h3, h4, h5, h6, p, and div.
  • i18n:
    • Updated translation strings.

10.11.0 – 2023.04.15

  • New features:
    • Added htmltagtitle, htmltagmonth and htmltagdate parameters, to allow SEO-focused developers to control the tags used for the calendar title, month and date headings in the calendar. (The month headings are used in month and list view; the date headings are used in list view only. Neither is used in week view.) Values are the names of the HTML tags (without the angle brackets), e.g. htmltagmonth="div". Accepted values are: h2, h3, h4, h5, h6, p, div and header. (h1 is deliberately excluded; for SEO purposes h1 should only appear once per page as the main title heading, and does not belong in ICS Calendar output.) The defaults are unchanged; if these parameters are omitted from the shortcode, ICS Calendar will continue to use h2 for the calendar title, h3 for month and h4 for dates. Note: This featured required some minor CSS and JavaScript changes: code that was previously referring directly to h2, h3 and h4 tags is now using the corresponding .ics-calendar-title, .ics-calendar-label and .ics-calendar-date CSS classes, respectively. If you have custom CSS or JavaScript in your site based on these tags, you’ll need to change it to use the CSS classes instead.
    • Added r34ics_allowed_heading_tags() function to support new htmltagtitle, htmltagmonth and htmltagdate parameters.
  • Bug fixes:
    • Fixed bug in week view introduced in 10.10.1 that would prevent current and future days from displaying under default conditions. (This occurred due to a change in how the value for startdate is determined.)
  • Miscellaneous:
    • Minor refactoring in R34ICS::shortcode().

10.10.1 – 2023.04.07

  • Month view:
    • Fixed doubled-up week number and table cell misalignment when the first day of the month is also the first day of the week.
    • Fixed logic for filler cells at end of month that would add too many extra cells when configured “Week starts on” day is not Sunday or Monday.
  • Week view:
    • Fixed bug that would cause the previous week to display instead of the current week if limitdays is set, when using the new defaults introduced in v.10.6.
    • Fixed layout bug that may occur (compressing the previous and current weeks into a single view) when the first day of the month is also the first day of the current week.
  • General:
    • Modified regular expression in r34ics_scrape_url_from_string() to support single quotes as attribute value delimiter in HTML link tags.
    • Minor updates to readme.txt content.

10.10.0 – 2023.03.31

Please note: With this version we are implementing a new development cycle and release process. Update releases will be limited to at most once per week, unless there is a critical issue. You can read more about this change on our blog.

  • New features/enhancements:
    • Added CONTACT, DURATION, FREEBUSY, GEO, and RESOURCES fields to output .ics files generated when using the eventdl option.
  • Admin:
    • Restricted System Report access to admins/super admins only.
  • Bug fixes:
    • Fixed: Added unbind() to jQuery for stepping through previous/next month links in navigation, to resolve an issue that caused the links to skip one or more months on pages that contain multiple AJAX-loaded calendars.
    • Fixed redundant date/event title text in list view on multi-day events.
    • Refactored list view pagination. Logic to determine whether or not to show the links is now directly based on whether or not there is more than one “page” in the HTML output. (Because of how the event data array is structured, it’s not possible to know how many pages will be in the output until the HTML is actually generated in the template.)
  • Functional changes:
    • Changed default value for guid in R34ICS::shortcode() from null to an auto-generated UID using r34ics_uid() function. This was already happening in R34ICS::display_calendar_ics_data_init() anyway, but by moving it to the shortcode() method, temporary AJAX container HTML elements can now have the same id attribute as the .ics-calendar element that will replace them, which will be useful for future AJAX-related development.
    • Changed JavaScript trigger from change to click for color key checkboxes. Should have no significant impact on typical usage but may help facilitate some future development.
    • Changed jQuery for color key feed toggle checkboxes from using .hide() and .show() to using a CSS class. This will allow for greater flexibility in how different views handle the checkboxes.
    • Changed logic for maskinfo in R34ICS::event_description_html() to hide the event details box regardless of the filler value.
    • Limited scope of CSS for combinemultiday to month (and week) view table layouts only.
    • Moved r34ics_init() call from jQuery(function()) into jQuery(window).on('load') to ensure page is fully ready before execution.
    • Refactored parts of R34ICS::display_calendar(), mainly around standardizing variable names between ICS Calendar and ICS Calendar Pro.
  • Developer:
    • Added r34ics_init_start and r34ics_init_end custom jQuery events at start and end of r34ics_init() function, allowing developers to add their own callbacks that fire off just before and after ICS Calendar initializes itself on the page.
    • Removed PHP deprecated notice for limitdayscustom because it is not actually deprecated, and may be legitimately included in the data passed by ICS Calendar Pro. – 2023.03.24

  • Fixed logic issue in r34ics_location_map_link() introduced in v.10.9.0 that may trigger PHP warnings in some ICS Calendar Pro views.

10.9.1 – 2023.03.24

  • Added paginationposition parameter, with accepted values above, below and both, to determine where pagination links appear in list view. Default is below.
  • Fixed bug in list view that may show pagination links even when there is only one page of events to display.

10.9.0 – 2023.03.24

  • Added less commonly used iCalendar spec fields CONTACT, DURATION, FREEBUSY, GEO, and RESOURCES to event data array, to support enhancements in this version plus future development.
  • Added mapsource parameter, accepting values google, bing or openstreetmap. Defaults to google if left blank. Note: This parameter has no effect unless location="maplinks" is also set.
  • Added resources="true" parameter to show resources (rooms, equipment, etc.) assigned to the event, in event description hover box/lightbox. (Note: This data is not present in most feeds.)
  • Modified organizer and location options to incorporate data from CONTACT and GEO, if present in the feed. Note: Because we do not have “real world” feed examples that use these properties, this functionality is considered “beta” at this time. Your feedback is welcomed!
  • i18n: Translated plugin description, added new text strings. – 2023.03.20

  • CSS fix for combinemultiday to prevent its block element styling from affecting list-style views. – 2023.03.18

  • Removed conditional in r34ics_feed_colors_css() that would prevent output unless either the color or tablebg shortcode parameter was set. This ensures that the r34ics_feed_colors_css filter can be applied in conditions that are independent of those parameters. – 2023.03.16

  • Improved handling of ICS Parser v. 3.2.1 changes.

10.8.8 – 2023.03.16

  • Changed handling of data for multi-day events. They are now grouped as all-day style events even if they have start/end times, and those start/end times are shown in the hover/toggle box rather than displayed directly in the calendar grid.
  • Ongoing improvements to combinemultiday presentation. – 2023.03.14

  • Added _r34ics_array_filter_recursive() function for use by _r34ics_debug() to produce more legible output for feeds with very long event descriptions.
  • Refactored logic around maskinfo to more effectively conceal event details when this option is being used.
  • Updated some event properties to handle changes introduced in ICS Parser library v. 3.2.1. Should resolve some issues relating to missing content, e.g. embedded images. – 2023.03.14

  • Added locale to cURL HTTP headers to facilitate translating auto-generated feed text (e.g. Google Meet link info) into the language configured in site settings.
  • CSS improvements to multiday events when using the new experimental combinemultiday setting.
  • Fixed deprecation notice that may appear in event description hover boxes if an event has a URL but no description, after changes in v. 10.8.6.
  • Fixed fatal error with legacyparser parameter introduced with use of the Event class’s new __get method in v. (Note: This fix, as currently coded, makes legacyparser incompatible with hideprivateevents.)

10.8.7 – 2023.03.13

  • Added experimental new parameter combinemultiday="true". This is designed to address a common request for better handling of multi-day events. Due to the way the Month and Week view templates are designed, it is not feasible to make these into HTML elements that truly span across multiple day cells in the calendar table. This update does not restructure the templates; instead, it uses an unconventional CSS technique to simulate an element spanning multiple cells. *Please let us know about any issues you encounter, or your general feedback, in the support forums.**
  • Added logic to read plugin version from ics-calendar.php header comments rather than hardcoding a constant value.
  • Changed most instances of code that were reading the plugin version from the R34ICS object property to instead read the r34ics_version option using the get_option() function.
  • Some minor code/comment reformatting.
  • Hotfix: Modified R34ICS::_date_events_sort() method to always group multi-day events first before single-day all-day events. This should reduce the likelihood of combinemultiday “breaking” if a single-day all-day event occurs in the middle of a multi-day event’s span. – 2023.03.10

  • Fixed bug with hideprivateevents due to changes introduced in the ICS Parser library v. 3.2.1, which was updated in ICS Calendar v. 10.8.4. ICS Parser moved the class property of the event object into a private additionalProperties array, with a magic “getter” function to retrieve the data. ICS Calendar’s hideprivateevents logic has now been updated accordingly. – 2023.03.09

  • Added check for presence of event URL in event description, to prevent possibly appending a redundant link, after changes introduced in version 10.8.6.
  • Modified use of r34ics_scrape_url_from_string() in extracting event URLs from descriptions, so this is only done when the description contains a single URL.
  • Refactored r34ics_scrape_url_from_string() function to use preg_match_all() and remove duplicate URLs from matches.

10.8.6 – 2023.03.08

  • Added logic to extract URLs from event descriptions, if event does not already have the URL field. This is an adaptation to recent changes to Google Calendar (and possibly other platforms) that removed the dedicated URL field from the event editing screens, in favor of including links directly in event descriptions. By automatically inserting the extracted URL into the event array’s 'url' node, all existing functionality such as linktitles will automatically use these extracted URLs when possible. (Also added r34ics_scrape_url_from_string() function to support this capability.)
  • Minified debug.css.

10.8.5 – 2023.03.06

  • Print CSS now includes event descriptions in table layout.
  • Set minimum width of 700 pixels, with horizontal scrolling, on table-based views (month and week) on mobile breakpoint when nomobile="true" is set in the shortcode. Only the calendar table scrolls horizontally, and it should not affect any other elements on the page. While horizontal scrolling is not ideal, it provides a way for the table cells to be a reasonable width (100 pixels each) for improved table readability on phones and other small-screen mobile devices.

10.8.4 – 2023.03.06

  • Added workaround to ICS Parser library code issue that was causing Warning: Undefined array key 4 PHP messages.
  • Bumped ICS Parser library to v. 3.2.1.

A note about PHP error messages: If your live site is displaying error messages of this type (from ICS Calendar or any plugin, or WordPress core), this means you have debugging turned on, which is not recommended for live sites, both because it looks bad, and also because it can be a slight security risk by potentially revealing details of your server configuration. Check your wp-config.php file and make sure the WP_DEBUG constant is set to false, and if the error messages still appear, you or your server admin may need to change the display_errors PHP setting in your .htaccess or php.ini file.

10.8.3 – 2023.03.01

  • Added multi-day event date range to event description (in hover, toggle and lightbox). Applies to month and week views only. (List view already displays multi-day events with a separate date range heading.)
  • Refactored R34ICS::event_description_html(), R34ICS::event_label_html() and R34ICS::event_sublabel_html() methods. – 2023.02.20

  • Added missing minified assets to repository.

10.8.2 – 2023.02.18

  • Consolidated r34ics-ajax.js into script.js.
  • Minified JS and CSS files. – 2023.02.17

  • Fixed bug that prevented saving Transient (cache) expiration option on admin page.
  • Modified logic for whether or not to use transients for retrieving the raw feed, to ensure the raw feed data is not retrieved from the cache if reload is set to a smaller value than the Transient (cache) expiration option.
  • Bumped “Tested up to” to 6.2.

10.8.1 – 2023.02.14

  • Added hideprivateevents option, which will exclude any events containing CLASS:PRIVATE or CLASS:CONFIDENTIAL from display. Also added R34ICS::r34ics_display_calendar_exclude_event() method for handling this and any future conditional exclusions, leveraging the existing r34ics_display_calendar_exclude_event filter.
  • Fixed bug in list view template by adding missing date variables to resolve PHP message Warning: Undefined variable $d in wp-content/plugins/ics-calendar/templates/calendar-list.php on line 237 caused by with changes in version 10.8.0.
  • Fixed bug in r34ics_has_desc() function that would display hover box for recurring events when hiderecurrence is set. (Was incorrectly checking for skiprecurrence, which determines whether recurring events are displayed at all.)
  • Minor code refactoring.
  • Updated plugin description in readme.txt and ics-calendar.php.

10.8.0 – 2023.02.13

  • Added data-events-count and data-feed-keys attributes to .ics-calendar-date-wrapper elements in list view.
  • Fixed CSS padding issue on multi-day events in list view with color and compact set.
  • Rewrote portions of the admin page to provide more useful guidance on getting started with the plugin, and added a link to the new online Shortcode Builder.
  • Removed any margin on :last-child element (which may be generated by the site theme) in .descloc and .eventdesc elements.
  • Updated ICS Calendar branding assets to new colors.
  • Updated readme.txt contents that appear on WordPress Plugin Directory to reflect availability of Shortcode Builder, and other minor tweaks.
  • i18n: Updated translation strings.

10.7.3 – 2023.02.07

  • AJAX fixes:
    • Added r34ics_url_uniqid_update() function to encapsulate updating the r34ics_feed_urls setting, and updated `r34ics_url_uniqid() to use it to create a new ID if one doesn’t already exist, to ensure that new URLs can be retrieved via AJAX without first being loaded by the regular method.
    • Fixed issues with ampersand entities in feed URLs and slash-escaped apostrophes and quotation marks.
  • Fixed PHP 8 deprecation notice in R34ICS::display_calendar_ics_data_init() method.
  • Hotfix: Added logic to prevent an empty row at the top of table-based views (month, week) when the first day of the month is also the first day of the week. – 2023.02.06

  • Changed conditional checking for deprecated shortcode parameters to reduce the possibility of unnecessary deprecation notices.
  • Corrected prefix on some hooks from r3417_ to r34ics_. Note: If your site contains any custom code using ICS Calendar’s hooks (actions/filters), be sure to replace any instances of r3417_ with r34ics_ in your code. (Retained deprecated old filter names for now.)
  • Fixed alphabetization of functions in functions.php file.

10.7.2 – 2023.02.02

  • Added CSS color variables to admin pages.
  • Added workaround for an issue with the new 10.6 default value for pastdays, when limitdays is set and calendar is starting on “today”. (Adds pastdays and limitdays together, to ensure limitdays is setting the number of days in the future rather than only showing past events.)
  • Updated ICS Feed URL Tester on admin page with additional diagnostic information. – 2023.02.01

  • Restored standard script enqueuing. This effectively undoes the change introduced in version 10.6.0, which has proven to introduce a number of issues with custom CSS and various optimization plugins, along with problems with the Customizer and FullCalendar features in ICS Calendar Pro. We will continue to troubleshoot these issues and hope to restore conditional enqueuing at a later time, but for now it is best for all users of the plugin if we revert to the standard enqueuing methods.

10.7.1 – 2023.01.31

  • Fixed conditional loading of debug.css for users with manage_options capability only (since the code for displaying the debug panel requires that capability anyway).
  • Fixed possible “undefined index” PHP warning on r34ics_calendar_view action in R34ICS::shortcode_defaults_merge() method.
  • Removed Load CSS and JS files on wp_enqueue_scripts action option, as it was causing a handful of issues with calendar rendering and conflicts with JS/CSS optimization plugins. Replaced with registering the JS/CSS files, and later conditional enqueuing as needed.
  • Updated Author URI in plugin file to ICS Calendar to make it easier for users to find the correct site when seeking direct support or commercial upgrades. ICS Calendar is still owned and developed by Room 34 Creative Services, LLC. – 2023.01.17

  • Fixed issues in list view introduced in 10.7.0 that may result in extra closing article tags, or missing closing div tags (if using pagination).
  • Moved list view pagination links outside of article tag to resolve some interaction issues.
  • Restyled list view pagination elements as a tags for better UX.
  • Removed animate scroll of pagination on list view due to inconsistent results. – 2023.01.16

  • Bumped version due to error during Subversion commit on version 10.7.0. (There are no code differences between this version and a properly updated copy of 10.7.0.)

10.7.0 – 2023.01.16

  • Added new pagination parameter for list view. Allows for long event lists to be broken up into smaller, paginated groups. Has no effect on any other views.
  • Added Transient (cache) expiration option to Administrative Options on admin page. This setting was previously hardcoded to 3600 unless using ICS Calendar Pro.
  • Moved Administrative Options up higher on admin page. (This section of the page is only accessible to users with the Administrator role.) Other minor HTML changes to admin page.
  • Updated calendar table cell border colors for consistency between views.
  • Updated System Report to include ICS Calendar’s saved settings. – 2023.01.09

  • Fix for possible PHP fatal error “Uncaught Error: Call to undefined function is_plugin_active()” on admin pages immediately after version update.

= 10.6.1 …