Descrizione
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).
Installazione
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.
FAQ
-
Come trovo l’URL del feed del mio calendario ICS?
-
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:
-
Come inserisco un calendario nella mia pagina?
-
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. -
Posso combinare calendari multipli?
-
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. -
Perché il mio calendario non viene caricato?
-
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 adddebug="true"
to your shortcode and view your page to see debugging output which may provide additional details about any connection issues. -
Perché il mio calendario non viene aggiornato?
-
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.) -
Documentazione aggiuntiva ed assistenza
-
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.
-
Richieste di funzionalità
-
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.
Recensioni
Contributi e sviluppo
“ICS Calendar” è un software open source. Le persone che hanno contribuito allo sviluppo di questo plugin sono indicate di seguito.
Collaboratori“ICS Calendar” è stato tradotto in 6 lingue. Grazie ai traduttori per i loro contributi.
Traduci “ICS Calendar” nella tua lingua.
Ti interessa lo sviluppo?
Esplora il codice segui il repository SVN, segui il log delle modifiche tramite RSS.
Changelog
11.5.10.1 – 2025.05.09
- Bug fix: Basic and List views now handle
paginationposition="both"
correctly. - Improved error handling in
r34ics_uniqid_url()
function andR34ICS::shortcode_defaults_merge()
method.
11.5.10 – 2025.05.02
- Actions and Filters:
- Added actions to Month and Week view templates:
r34ics_display_calendar_after_day_label
andr34ics_display_calendar_after_events_list
. As the names indicate, these actions allow for custom output after the day label and day events lists for each day in the table in these views. Hooked functions have access to four input parameters:$view
,$args
,$date
and$day_events
.
- Added actions to Month and Week view templates:
11.5.9.1 – 2025.04.28
- Modified
r34ics_url_tester_result_debug
hook to be able to account for situations where the response is empty. - Vendors:
- ics-parser: Changed timezone string mappings for “(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius” and “FLE Standard Time” from “Europe/Kiev” to “Europe/Helsinki”. This is because the ics-parser library uses the spelling “Kiev”, whereas ICS Calendar code uses the spelling “Kyiv”. This discrepancy was causing time calculation issues, specifically for Microsoft source calendars, which use the “FLE Standard Time” designation. “Europe/Helsinki” was chosen to avoid alternate spelling confusion, and also because “FLE” stands for “Finland Latvia Estonia”, making Helsinki a more logical choice than Kyiv. (Both cities share the same timezone rules.)
11.5.9 – 2025.04.24
- Added
wp_get_remote()
status check to System Report; refactored System Report to use transients.
11.5.8 – 2025.04.22
- Removed
r34ics_ajax_bypass_nonce
option. Nonce has now been removed from ICS Calendar AJAX requests altogether, as the requests do not have the ability to write to the database, making the nonce unnecessary. The nonce has consistently caused issues with AJAX requests in conjunction with third-party caching plugins. - CSS tweaks on admin page.
- i18n:
- Removed disused translation strings.
- Removed Norwegian Nynorsk translation files, due to consistent issues with Poedit machine translations.
11.5.7.1 – 2025.04.11
- Bug fix: Added exception handling to prevent a fatal error if
r34ics_date()
is passed a timezone string that is not a valid format recognized by the PHPDateTimeZone
class. - Bug fix: Removed extraneous pagination close tag in list view that may cause the pagination HTML to break if the last item on a “page” is a multi-day event.
- Changed scope of special date range handling in week view.
11.5.7 – 2025.03.07
- Modified activation process to jump directly to Getting Started tab of admin page.
- Redesigned Getting Started tab and sidebar of admin page.
- i18n: Updated translation files, added missing text strings.
11.5.6.1 – 2025.03.06
- Updated help text on Settings page.
11.5.6 – 2025.02.26
- Added
none
as a valid option for themonthnav
parameter, allowing for hiding the month navigation altogether. (Useful when showing month view in a kiosk environment or other settings where the user doesn’t need the ability to switch the view to a different month.) - Bumped ‘tested up to’ to 6.7.2.
11.5.5 – 2025.02.24
- Added support for using HTML color names in the shortcode, in addition to hex colors, via the new
r34ics_color_name2hex()
function.
11.5.4.2 – 2025.02.18
- Made calls to
php_uname()
in System Report conditional; some servers may remove support for this function for security reasons. Also replaced call tophpversion()
withPHP_VERSION
constant, with a conditional in case the constant is undefined. These changes should resolve issues where the ICS Calendar admin page does not load properly on servers with these security measures in place. - Updated copyright terms regarding ICS Calendar name and branding assets.
11.5.4.1 – 2025.02.10
- Refactored
r34ics_date()
to usewp_date()
after applying its offset and other input standardizations, rather than duplicating the code ofwp_date()
. This also resolves an issue where in some rare cases, the passed-in timezone may not be handled correctly. - Added missing event timezone inputs to
r34ics_date()
calls in theR34ICS::event_description_html()
method andr34ics_multiday_date_label()
function. Without timezones, date ranges for multi-day events could be one day “off” in the event descriptions and labels after the aforementioned refactoring ofr34ics_date()
. - Fixed incorrect date display issues in
R34ICS::event_description_html()
. Note: Version 11.5.4 was withdrawn due to this issue, which was discovered a few minutes after its release. - Modified event sorting for multi-day events starting on the same date. Now, list-style views (list, basic) will show these events sorted by earliest ending date. Table-style views (month, week), will show the events sorted by the latest ending date, which helps to reduce situations where events “break” between days in the layout when using
combinemultiday
.
11.5.3.2 – 2025.02.07
- Bug fix: Resolved possible fatal error caused if new
r34ics_i18n_locales()
function added in 11.5.3.1 runs on a logged-out front-end page.
11.5.3.1 – 2025.02.06
- Fixed bug with
reverse
andpagination
on Basic and List views that would cause the wrong “page” to display on load. - i18n: Updated translation strings. Added logic to force the plugin’s embedded translation files to take precedence over any downloaded community translation files in the
WP_LANG_DIR/plugins
directory.
11.5.3 – 2025.02.03
- Fixed issue with pagination in list view that would include the next single-day event(s) on a “page” when a multi-day event was the correctly counted “last” item on the page.
- Modified handling of
pagination="1"
in Basic and List views, to literally mean 1 event, rather than being interpreted as a boolean “true” and defaulting to 5 events per page. Settingpagination="true"
will still default to 5 per page. List view also now omits the month/year headers when displaying one event per page. - Modified handling of
count
andpagination
parameters to force positive integer values.
11.5.2.1 – 2025.02.03
- Added
r34ics_comparison_string()
function to process strings for comparison purposes. Used by features added toR34ICS::r34ics_display_calendar_exclude_event()
in 11.5.2 to filter events by category, accounting for possible formatting issues with accented letters. - Modified shortcode logic to force certain parameter values to all-lowercase. This allows the input values to be case-insensitive; previously, non-lowercase values would be treated as invalid. Applies primarily to parameters that have defined arrays of accepted values, e.g.
columnlabels
orextendmultiday
.
11.5.2 – 2025.01.31
- Added
category
attribute to allow filtering events by category. Multiple categories may be included, using the pipe character|
as a delimiter. Category names used must exactly match the category names in the feed (case-insensitive). Currently this feature simply excludes events that are not in one of the designated categories. A future update will add support for color-coded categories, similar to the current support for multiple feeds in one calendar shortcode. Note: This feature requires that your ICS feed data includes theCATEGORIES
property, which is not widely supported by most popular calendar software.
11.5.1.3 – 2025.01.22
- Modified logic for
maskinfo
that would remove the info hover box on multi-day events with specified start and end times.
11.5.1.2 – 2025.01.20
- Miscellaneous:
- Added
r34ics_ajax_bypass_nonce
status to System Report.
- Added
11.5.1.1 – 2025.01.08
- Bug fixes:
- Added logic to trim extraneous spaces from the beginning and end of all attribute values when parsing the shortcode, and in sanitization logic in
r34ics-ajax.php
. - Added
r34ics_color_key_allowed()
function and updatedr34ics_select_allowed()
to merge custom allowed fields withwp_kses_allowed_html('post')
. This resolves issues with the color key (legend) that were introduced with changes in v. 11.5.0 and 11.5.1. - Changed
r34ics_minify_css()
handling of whitespace to resolve issues when output is fed throughwp_kses_post()
. - Fixed duplicate description output that may result with ALTREP handling introduced in 11.5.1.
- Fixed handling of feed parsing failures that would cause a fatal error unless the
debug
parameter is set in the shortcode.
- Added logic to trim extraneous spaces from the beginning and end of all attribute values when parsing the shortcode, and in sanitization logic in
11.5.1 – 2025.01.07
- Functional enhancements:
- Added protected
R34ICS::_event_field_handling()
method to facilitate complex logic (i.e. too much to fit in one line of code) when assigning values in the$event_item
array inR34ICS::display_calendar()
and related functions. This includes the newr34ics_event_field_handling
filter for additional external processing of event data. (If working with the filter, be aware that it is currently only applied to theeventdesc
value.) This functionality was specifically added to accommodate changes needed for the ALTREP property described below, but it is open-ended to support additional future enhancements.
- Added protected
- iCalendar spec support:
- Added limited support for Thunderbird’s use of the ALTREP parameter in event descriptions. Thunderbird does not appear to conform to the spec — the
ALTREP
value is not wrapped in quotation marks. However, since this is our first observation of ALTREP in use, our solution is tailored to the Thunderbird output we have observed. Additional feedback on this feature is welcomed.
- Added limited support for Thunderbird’s use of the ALTREP parameter in event descriptions. Thunderbird does not appear to conform to the spec — the
- PHP deprecation notices:
- Modified the
event_description_html()
,event_label_html()
andevent_sublabel_html()
methods ofR34ICS
to return empty strings rather than null or false values when empty. - Added
?: ''
empty string fallback value to all instances ofwp_kses_post()
added in version 11.5.0, to work around “Deprecated: preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated” warnings. This should technically be addressed within the WordPress corewp_kses_no_null()
function. We have opened a Trac ticket. If the core function is modified to handle null values, the then-superfluous?: ''
will be removed from these function calls in a future update.
- Modified the
11.5.0 – 2025.01.03
- i18n:
- Added
translators:
comments for each translation string containing placeholders. - Changed text domain from
r34ics
toics-calendar
to conform with WordPress Plugin Directory requirements. Translation files included within the plugin have been correspondingly updated, but if you are using third-party translations or a plugin such as Say What, you may need to update them with the new text domain. - Replaced
%s
translation string placeholders with%1$s
. - Replaced uses of unescaped
_e()
and__()
functions with the corresponding escaped functionsesc_html_e()
,esc_html__()
,esc_attr_e()
andesc_attr__()
, as appropriate. - Updated all translation files to reflect the above changes.
- Added
- Miscellaneous:
- Added extra sanitization functionality to handling of form inputs on Settings page and
r34ics-ajax.php
. - Added text escaping functions to dynamic plugin output in templates.
- Added
r34ics_select_allowed()
function. - Fixed CSS padding issue with week numbers in month and week views.
- Replaced uses of certain standard PHP functions such as
json_encode()
,mt_rand()
,parse_url()
andstrip_tags()
with their WordPress-specific equivalents (e.g.wp_json_encode()
,wp_rand()
,wp_parse_url()
andwp_strip_tags()
). - Updated handling of server variables in System Report.
- Added extra sanitization functionality to handling of form inputs on Settings page and
- Vendors:
- Updated embedded ics-parser library to version 3.4.1 (with namespace change to prevent plugin conflicts, and removal of variables from error messages due to Plugin Check reporting them as coding errors).
Full Changelog
Changelog truncated here due to WordPress repository requirements. Please see changelog.txt
for older logs.