{"id":4740,"date":"2025-02-19T16:52:03","date_gmt":"2025-02-19T16:52:03","guid":{"rendered":"https:\/\/s-o-s.net\/ics-calendar\/"},"modified":"2025-02-19T16:52:03","modified_gmt":"2025-02-19T16:52:03","slug":"ics-calendar","status":"publish","type":"post","link":"https:\/\/s-o-s.net\/en_gb\/ics-calendar\/","title":{"rendered":"ICS Calendar"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<article id=\"post-69535\" class=\"alignwide post-69535 plugin type-plugin status-publish hentry plugin_tags-events plugin_tags-google-calendar plugin_tags-icalendar plugin_tags-ics-feed plugin_tags-office-365 plugin_category-calendar-and-events plugin_contributors-room34 plugin_business_model-commercial plugin_committers-room34 plugin_support_reps-room34\">\n<div class=\"plugin-banner\" id=\"plugin-banner-ics-calendar\"><\/div>\n<header class=\"plugin-header\">\n<div class=\"entry-heading-container\">\n<div>\n<div class=\"entry-thumbnail\">\n\t\t\t\t\t<img decoding=\"async\" class=\"plugin-icon\" src=\"https:\/\/ps.w.org\/ics-calendar\/assets\/icon.svg?rev=2864649\" alt=\"\">\t\t\t\t<\/div>\n<div>\n<h1 class=\"plugin-title\">ICS Calendar<\/h1>\n<p>\t\t\t\t\t<span class=\"byline\">By <span class=\"author vcard\"><a target=\"_blank\" class=\"url fn n\" href=\"https:\/\/profiles.wordpress.org\/room34\/\" rel=\"noopener\">room34<\/a><\/span><\/span>\n\t\t\t\t<\/div>\n<\/p><\/div>\n<div class=\"plugin-actions\">\n<div class=\"wp-block-button is-small plugin-download download-button\"><a target=\"_blank\" class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/downloads.wordpress.org\/plugin\/ics-calendar.11.5.4.2.zip\" rel=\"noopener\">Download<\/a><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/header>\n<p><!-- .entry-header --><\/p>\n<p>\t<span id=\"description\"><\/span><br \/>\n\t<span id=\"reviews\"><\/span><br \/>\n\t<span id=\"installation\"><\/span><br \/>\n\t<span id=\"developers\"><\/span><br \/>\n\t<span id=\"advanced\" class=\"\"><\/span><br \/>\n\t<span id=\"section-links\"><\/p>\n<ul class=\"tabs clear\">\n<li id=\"tablink-description\"><a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/ics-calendar\/#description\" rel=\"noopener\">Details<\/a><\/li>\n<li id=\"tablink-reviews\"><a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/ics-calendar\/#reviews\" rel=\"noopener\">Reviews<\/a><\/li>\n<li id=\"tablink-installation\">\n\t\t\t\t<a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/ics-calendar\/#installation\" rel=\"noopener\">Installation<\/a>\n\t\t\t<\/li>\n<li id=\"tablink-developers\"><a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/ics-calendar\/#developers\" rel=\"noopener\">Development<\/a><\/li>\n<\/ul>\n<div id=\"link-support\">\n\t\t\t<a target=\"_blank\" href=\"https:\/\/wordpress.org\/support\/plugin\/ics-calendar\/\" rel=\"noopener\">Support<\/a>\n\t\t<\/div>\n<p>\t<\/span><br \/>\n\t<script type=\"text\/javascript\">if ( '#changelog' == window.location.hash ) { window.setTimeout( function() { window.location.hash=\"#developers\"; }, 10 ); }<\/script><\/p>\n<div class=\"entry-content\">\n<div id=\"tab-description\" class=\"plugin-description section\">\n<h2 id=\"description-header\">Description<\/h2>\n<p>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.<\/p>\n<p>Continue to manage your events in the calendar software you\u2019re already using! You\u2019ll automatically have an up-to-date calendar in your WordPress website with no extra work.<\/p>\n<p>Display your calendar in month, list or week view. Many additional customization options are available. See our <a target=\"_blank\" href=\"https:\/\/icscalendar.com\/user-guide\/\" rel=\"nofollow ugc noopener\">User Guide<\/a> for full details.<\/p>\n<p><strong>No API keys required!<\/strong><\/p>\n<p><strong>Works with ANY calendar software<\/strong> that generates a public iCalendar subscription link.<\/p>\n<h4>Live Preview<\/h4>\n<p>You can preview your own calendar in any ICS Calendar view at our website: <a target=\"_blank\" href=\"https:\/\/icscalendar.com\/preview\/\" rel=\"nofollow ugc noopener\">icscalendar.com\/preview<\/a><\/p>\n<h4>Shortcode Builder<\/h4>\n<p>We\u2019ve made it easier than ever to get started using ICS Calendar with our new online shortcode builder: <a target=\"_blank\" href=\"https:\/\/icscalendar.com\/shortcode-builder\/\" rel=\"nofollow ugc noopener\">icscalendar.com\/shortcode-builder<\/a><\/p>\n<h4>Language Support<\/h4>\n<p>All date strings (days of the week, months, etc.) are automatically translated into your site\u2019s configured language (under <strong>Settings &gt; General &gt; Language<\/strong>) and date\/time formats using core WordPress functionality. All text content for the calendar itself is displayed as-is from the feed.<\/p>\n<p>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.<\/p>\n<p>Please contact us if you would like us to add support for your language!<\/p>\n<p><em>This plugin includes the PHP ICS Parser library by Jonathan Goode, John Grogg and Martin Thoma (MIT license).<\/em><\/p>\n<\/div>\n<div id=\"tab-installation\" class=\"plugin-installation section\">\n<h2 id=\"installation-header\">Installation<\/h2>\n<p>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 <a target=\"_blank\" href=\"https:\/\/icscalendar.com\/shortcode-builder\/\" rel=\"nofollow ugc noopener\">Shortcode Builder<\/a> to easily create a customized shortcode, or consult the <a target=\"_blank\" href=\"https:\/\/icscalendar.com\/user-guide\" rel=\"nofollow ugc noopener\">User Guide<\/a> for more information.<\/p>\n<pre><code>[ics_calendar url=\"\"]\n<\/code><\/pre>\n<p>Be sure you are using the <em>iCalendar subscription (ICS)<\/em> 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 <code>.ics<\/code> file, not display the calendar in the browser.<\/p>\n<\/div>\n<div id=\"faq\" class=\"plugin-faq section\">\n<h2 id=\"faq-header\">FAQ<\/h2>\n<dl>\n<dt id=\"how%20do%20i%20find%20my%20calendar%27s%20ics%20feed%20url%3F\">\n<h3>How do I find my calendar\u2019s ICS feed URL?<\/h3>\n<\/dt>\n<dd>\n<p>Different calendar systems have different ways to obtain the feed URL. You may need to consult your calendar software\u2019s documentation for assistance. Find instructions for commonly used calendars below.<\/p>\n<p>You will also need to make sure that your calendar is public. Private calendars cannot be accessed by this plugin.<\/p>\n<p><em>Documentation quick links:<\/em><\/p>\n<ul>\n<li><a target=\"_blank\" href=\"https:\/\/support.google.com\/calendar\/answer\/37083#link\" rel=\"nofollow ugc noopener\">Google Calendar<\/a><\/li>\n<li><a target=\"_blank\" href=\"https:\/\/support.office.com\/en-us\/article\/share-your-calendar-in-outlook-on-the-web-7ecef8ae-139c-40d9-bae2-a23977ee58d5\" rel=\"nofollow ugc noopener\">Microsoft Office 365<\/a><\/li>\n<li><a target=\"_blank\" href=\"https:\/\/www.macobserver.com\/tips\/quick-tip\/icloud-configure-public-calendar\" rel=\"nofollow ugc noopener\" class=\"broken_link\">Apple iCloud<\/a><\/li>\n<\/ul>\n<\/dd>\n<dt id=\"how%20do%20i%20insert%20a%20calendar%20into%20my%20page%3F\">\n<h3>How do I insert a calendar into my page?<\/h3>\n<\/dt>\n<dd>\n<p>Use this shortcode, inserting your ICS feed URL between the quotation marks:<\/p>\n<pre><code>[ics_calendar url=\"\"]\n<\/code><\/pre>\n<p>Be sure you are using the <em>iCalendar subscription (ICS)<\/em> 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 <code>.ics<\/code> file, not display the calendar in the browser.<\/p>\n<\/dd>\n<dt id=\"can%20i%20combine%20multiple%20calendars%3F\">\n<h3>Can I combine multiple calendars?<\/h3>\n<\/dt>\n<dd>\n<p>Yes! You can combine multiple calendars by including more than one feed URL in the <code>url<\/code> parameter. <strong>Separate the calendar URLs with one space or a pipe <code>|<\/code> character.<\/strong> Do not include any other delimiter characters, as they will be interpreted as part of the URL.<\/p>\n<\/dd>\n<dt id=\"why%20isn%27t%20my%20calendar%20loading%3F\">\n<h3>Why isn\u2019t my calendar loading?<\/h3>\n<\/dt>\n<dd>\n<p>This may be due to your server\u2019s configuration. This plugin requires either the PHP cURL extensions, or the <code>allow_url_fopen<\/code> 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 <code>debug=\"true\"<\/code> to your shortcode and view your page to see debugging output which may provide additional details about any connection issues.<\/p>\n<\/dd>\n<dt id=\"why%20isn%27t%20my%20calendar%20updating%3F\">\n<h3>Why isn\u2019t my calendar updating?<\/h3>\n<\/dt>\n<dd>\n<p>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 <strong>ICS Calendar<\/strong> page in your site admin and click the <strong>Clear Cached Calendar Data<\/strong> button.<\/p>\n<p>Third-party caching plugins may interfere with ICS Calendar\u2019s feed syncing. If you are using a caching plugin and your calendar is not updating, try using the <a target=\"_blank\" href=\"https:\/\/icscalendar.com\/icsdocs\/#ajax\" rel=\"nofollow ugc noopener\">AJAX<\/a> option in your shortcode.<\/p>\n<\/dd>\n<dt id=\"why%20are%20event%20times%20an%20hour%20off%20after%20daylight%20saving%20time%20begins%3F\">\n<h3>Why are event times an hour off after Daylight Saving Time begins?<\/h3>\n<\/dt>\n<dd>\n<p>PHP has two different ways of defining timezones: as a number of hours offset from GMT\/UTC (e.g. \u201cUTC-5\u201d), or as a continent\/city combination (e.g. \u201cAmerica\/Chicago\u201d). Timezones using UTC offsets do not handle Daylight Saving Time correctly (as noted in the <a target=\"_blank\" href=\"https:\/\/www.php.net\/manual\/en\/timezones.others.php\" rel=\"nofollow ugc noopener\">PHP documentation<\/a>). Please check your WordPress timezone settings (<strong>Settings &gt; General &gt; Timezone<\/strong>). 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 <code>tz<\/code> parameter. (Again, be sure to use a named region\/city timezone, not a UTC offset.)<\/p>\n<\/dd>\n<dt id=\"additional%20documentation%20and%20support\">\n<h3>Additional documentation and support<\/h3>\n<\/dt>\n<dd>\n<p>Our <a target=\"_blank\" href=\"https:\/\/icscalendar.com\/user-guide\/\" rel=\"nofollow ugc noopener\">User Guide<\/a> includes extensive documentation of all features of the plugin, is frequently updated, and is translated into all languages supported by the plugin.<\/p>\n<\/dd>\n<dt id=\"feature%20requests\">\n<h3>Feature requests<\/h3>\n<\/dt>\n<dd>\n<p>The paid <a target=\"_blank\" href=\"https:\/\/icscalendar.com\" rel=\"nofollow ugc noopener\">ICS Calendar Pro<\/a> add-on includes additional layout options, tools for customizing the calendar\u2019s appearance more easily than directly editing CSS, an improved insertion tool, and more. We are also constantly adding new features and refinements to <em>both<\/em> the free and paid versions. If you have suggestions for features you\u2019d like to see or any other additional input, please let us know by following the support link on the admin page or in the <a target=\"_blank\" href=\"https:\/\/wordpress.org\/support\/plugin\/ics-calendar\/\" rel=\"ugc noopener\">WordPress support forums<\/a>! The base plugin will always be free to use.<\/p>\n<\/dd>\n<\/dl>\n<\/div>\n<div id=\"tab-reviews\" class=\"plugin-reviews section\">\n<h2 id=\"reviews-header\">Reviews<\/h2>\n<div class=\"plugin-reviews\">\n<article class=\"plugin-review\">\n<div class=\"review-avatar\">\n\t\t\t\t\t\t<img decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/c0b37cc1ba1f66160b9f4c08a68a2fbaaf8d2e615ba5f17a83671ba40025e8c8?s=60&amp;d=retro&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/c0b37cc1ba1f66160b9f4c08a68a2fbaaf8d2e615ba5f17a83671ba40025e8c8?s=120&amp;d=retro&amp;r=g 2x\" class=\"avatar avatar-60 photo\" height=\"60\" width=\"60\">\t\t\t\t\t<\/div>\n<div class=\"review\">\n<header>\n<div class=\"header-top\">\n<div class=\"wporg-ratings\" aria-label=\"5 out of 5 stars\" data-title-template=\"%s out of 5 stars\" data-rating=\"5\" style=\"color:#ffb900;\"><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><\/div>\n<h3 class=\"review-title\"><a target=\"_blank\" class=\"url\" href=\"https:\/\/wordpress.org\/support\/topic\/very-helpful-plugin-very-helpful-support\/\" rel=\"noopener\">Very helpful plugin, very helpful support!<\/a><\/h3>\n<\/p><\/div>\n<div class=\"header-bottom\">\n\t\t\t\t\t\t\t\t<span class=\"review-author author vcard\"><a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/cede007\/\" title=\"Posts by cede007\" rel=\"author noopener\">cede007<\/a><\/span><br \/>\n\t\t\t\t\t\t\t\t<span class=\"review-date\">February 17, 2025<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n<\/header>\n<div class=\"review-content\">Very helpful plugin in conjunction with the events manager. Very fast, friendly and helpful support from the developer. It couldn\u2019t be better!<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"plugin-review\">\n<div class=\"review-avatar\">\n\t\t\t\t\t\t<img decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/3ba04cf05ffcbd6375f867b8ff636131003760de62032ab3c079715bfba458a9?s=60&amp;d=retro&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/3ba04cf05ffcbd6375f867b8ff636131003760de62032ab3c079715bfba458a9?s=120&amp;d=retro&amp;r=g 2x\" class=\"avatar avatar-60 photo\" height=\"60\" width=\"60\">\t\t\t\t\t<\/div>\n<div class=\"review\">\n<header>\n<div class=\"header-top\">\n<div class=\"wporg-ratings\" aria-label=\"5 out of 5 stars\" data-title-template=\"%s out of 5 stars\" data-rating=\"5\" style=\"color:#ffb900;\"><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><\/div>\n<h3 class=\"review-title\"><a target=\"_blank\" class=\"url\" href=\"https:\/\/wordpress.org\/support\/topic\/awesome-plugin-and-top-notch-support-4\/\" rel=\"noopener\">Awesome plugin and top notch support<\/a><\/h3>\n<\/p><\/div>\n<div class=\"header-bottom\">\n\t\t\t\t\t\t\t\t<span class=\"review-author author vcard\"><a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/radicoos\/\" title=\"Posts by radicoos\" rel=\"author noopener\">radicoos<\/a><\/span><br \/>\n\t\t\t\t\t\t\t\t<span class=\"review-date\">November 11, 2024<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n<\/header>\n<div class=\"review-content\">I have been using the ICS Calendar plugin for about two years now, and it has been an invaluable asset to my membership site. Since implementing the plugin, member retention and engagement have significantly increased, as I can display all upcoming events in one place, keeping members connected and engaged. The plugin is incredibly powerful, flexible, and well-maintained with regular updates. I can\u2019t say enough good things about the developer. As others have mentioned, his support is outstanding, he goes above and beyond to troubleshoot and resolve issues, even when it\u2019s clear the problem is caused by conflicts from other plugins. Highly, highly recommended<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"plugin-review\">\n<div class=\"review-avatar\">\n\t\t\t\t\t\t<img decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/64fbe69ea9a767bd94181444690330f23e188b46ee8a6382f96fb993f7980957?s=60&amp;d=retro&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/64fbe69ea9a767bd94181444690330f23e188b46ee8a6382f96fb993f7980957?s=120&amp;d=retro&amp;r=g 2x\" class=\"avatar avatar-60 photo\" height=\"60\" width=\"60\">\t\t\t\t\t<\/div>\n<div class=\"review\">\n<header>\n<div class=\"header-top\">\n<div class=\"wporg-ratings\" aria-label=\"5 out of 5 stars\" data-title-template=\"%s out of 5 stars\" data-rating=\"5\" style=\"color:#ffb900;\"><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><\/div>\n<h3 class=\"review-title\"><a target=\"_blank\" class=\"url\" href=\"https:\/\/wordpress.org\/support\/topic\/great-plugin-39685\/\" rel=\"noopener\">Great plugin<\/a><\/h3>\n<\/p><\/div>\n<div class=\"header-bottom\">\n\t\t\t\t\t\t\t\t<span class=\"review-author author vcard\"><a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/rafaelurben\/\" title=\"Posts by Rafael Urben\" rel=\"author noopener\">Rafael Urben<\/a><\/span><br \/>\n\t\t\t\t\t\t\t\t<span class=\"review-date\">October 28, 2024<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n<\/header>\n<div class=\"review-content\">This is a very practical plugin that comes with a LOT of options.<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"plugin-review\">\n<div class=\"review-avatar\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/202b44026f0a4f1cb3722fdf6e8012e05a1b7833025f5eec0660e6e99effb5ba?s=60&amp;d=retro&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/202b44026f0a4f1cb3722fdf6e8012e05a1b7833025f5eec0660e6e99effb5ba?s=120&amp;d=retro&amp;r=g 2x\" class=\"avatar avatar-60 photo\" height=\"60\" width=\"60\">\t\t\t\t\t<\/div>\n<div class=\"review\">\n<header>\n<div class=\"header-top\">\n<div class=\"wporg-ratings\" aria-label=\"5 out of 5 stars\" data-title-template=\"%s out of 5 stars\" data-rating=\"5\" style=\"color:#ffb900;\"><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><\/div>\n<h3 class=\"review-title\"><a target=\"_blank\" class=\"url\" href=\"https:\/\/wordpress.org\/support\/topic\/great-plugin-great-support-1904\/\" rel=\"noopener\">Great plugin. Great support.<\/a><\/h3>\n<\/p><\/div>\n<div class=\"header-bottom\">\n\t\t\t\t\t\t\t\t<span class=\"review-author author vcard\"><a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/matt6303\/\" title=\"Posts by Matt Scheidler\" rel=\"author noopener\">Matt Scheidler<\/a><\/span><br \/>\n\t\t\t\t\t\t\t\t<span class=\"review-date\">August 5, 2024<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n<\/header>\n<div class=\"review-content\">I use this plugin on three separate websites that have three distinct needs.  The flexibility in the setup allows me to accomplish what I need on each site.  On the couple of occasions I\u2019ve needed support, it has been extremely prompt and accurate.  Highly recommended if you have Google calendars you need to display on your sites.<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"plugin-review\">\n<div class=\"review-avatar\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/55d99a741d35ece46269f98716f628818a61d979116b5598c965c5d76095bff0?s=60&amp;d=retro&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/55d99a741d35ece46269f98716f628818a61d979116b5598c965c5d76095bff0?s=120&amp;d=retro&amp;r=g 2x\" class=\"avatar avatar-60 photo\" height=\"60\" width=\"60\">\t\t\t\t\t<\/div>\n<div class=\"review\">\n<header>\n<div class=\"header-top\">\n<div class=\"wporg-ratings\" aria-label=\"5 out of 5 stars\" data-title-template=\"%s out of 5 stars\" data-rating=\"5\" style=\"color:#ffb900;\"><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><\/div>\n<h3 class=\"review-title\"><a target=\"_blank\" class=\"url\" href=\"https:\/\/wordpress.org\/support\/topic\/great-plugin-very-flexible-and-awesome-support\/\" rel=\"noopener\">Great plugin, very flexible and awesome support<\/a><\/h3>\n<\/p><\/div>\n<div class=\"header-bottom\">\n\t\t\t\t\t\t\t\t<span class=\"review-author author vcard\"><a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/jlherren\/\" title=\"Posts by jlherren\" rel=\"author noopener\">jlherren<\/a><\/span><br \/>\n\t\t\t\t\t\t\t\t<span class=\"review-date\">June 23, 2024<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n<\/header>\n<div class=\"review-content\">Thank you for a great plugin that allows for almost arbitrary customization if you can write some PHP. To top it all, my support question was answered in \u2014 drum roll please \u2014 just 11 minutes! \ud83e\udd29<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"plugin-review\">\n<div class=\"review-avatar\">\n\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/622a9f57a18b8e8a0b8dbe482674ddd026fc0429e4384aafd63e44915170ba68?s=60&amp;d=retro&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/622a9f57a18b8e8a0b8dbe482674ddd026fc0429e4384aafd63e44915170ba68?s=120&amp;d=retro&amp;r=g 2x\" class=\"avatar avatar-60 photo\" height=\"60\" width=\"60\">\t\t\t\t\t<\/div>\n<div class=\"review\">\n<header>\n<div class=\"header-top\">\n<div class=\"wporg-ratings\" aria-label=\"5 out of 5 stars\" data-title-template=\"%s out of 5 stars\" data-rating=\"5\" style=\"color:#ffb900;\"><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><\/div>\n<h3 class=\"review-title\"><a target=\"_blank\" class=\"url\" href=\"https:\/\/wordpress.org\/support\/topic\/incredible-support-139\/\" rel=\"noopener\">Incredible Support<\/a><\/h3>\n<\/p><\/div>\n<div class=\"header-bottom\">\n\t\t\t\t\t\t\t\t<span class=\"review-author author vcard\"><a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/ahtraut\/\" title=\"Posts by ahtraut\" rel=\"author noopener\">ahtraut<\/a><\/span><br \/>\n\t\t\t\t\t\t\t\t<span class=\"review-date\">May 20, 2024<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n<\/header>\n<div class=\"review-content\">What a great and useful plugin, the free version is great but the ability to customize is wild with the paid version. I wish I knew sooner how easy it would be to use the paid version. Scott helped me so much with tech support. Really loving this plugin.<\/div>\n<\/p><\/div>\n<\/article><\/div>\n<p>\t\t<a target=\"_blank\" class=\"reviews-link\" href=\"https:\/\/wordpress.org\/support\/plugin\/ics-calendar\/reviews\/\" rel=\"noopener\"><br \/>\n\t\t\tRead all 66 reviews\t\t<\/a><\/div>\n<div id=\"tab-developers\" class=\"plugin-developers section\">\n<h2 id=\"developers-header\">Contributors &amp; Developers<\/h2>\n<div class=\"plugin-contributors\">\n<p>\u201cICS Calendar\u201d is open source software. The following people have contributed to this plugin.<\/p>\n<p><span class=\"screen-reader-text\">Contributors<\/span><\/p>\n<ul id=\"contributors-list\" class=\"contributors-list\">\n<li>\n\t\t\t\t<img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/114570819832b68b1755d91bbb256c20ca7b4b44b3f8d2f6fc407ea6f9101c8a?s=32&amp;d=mm&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/114570819832b68b1755d91bbb256c20ca7b4b44b3f8d2f6fc407ea6f9101c8a?s=64&amp;d=mm&amp;r=g 2x\" class=\"avatar avatar-32 photo\" height=\"32\" width=\"32\">\t\t\t\t<a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/room34\/\" rel=\"noopener\"><br \/>\n\t\t\t\t\troom34\t\t\t\t<\/a>\n\t\t\t<\/li>\n<\/ul><\/div>\n<div class=\"plugin-development\">\n<p>\u201cICS Calendar\u201d has been translated into 6 locales. Thank you to <a target=\"_blank\" href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/ics-calendar\/contributors\" rel=\"noopener\">the translators<\/a> for their contributions.<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/ics-calendar\" rel=\"noopener\">Translate \u201cICS Calendar\u201d into your language.<\/a><\/p>\n<h3>Interested in development?<\/h3>\n<p><a target=\"_blank\" href=\"https:\/\/plugins.trac.wordpress.org\/browser\/ics-calendar\/\" rel=\"noopener\" class=\"broken_link\">Browse the code<\/a>, check out the <a target=\"_blank\" href=\"https:\/\/plugins.svn.wordpress.org\/ics-calendar\/\" rel=\"noopener\">SVN repository<\/a>, or subscribe to the <a target=\"_blank\" href=\"https:\/\/plugins.trac.wordpress.org\/log\/ics-calendar\/\" rel=\"noopener\" class=\"broken_link\">development log<\/a> by <a target=\"_blank\" href=\"https:\/\/plugins.trac.wordpress.org\/log\/ics-calendar\/?limit=100&amp;mode=stop_on_copy&amp;format=rss\" rel=\"noopener\" class=\"broken_link\">RSS<\/a>.<\/p>\n<\/div>\n<\/div>\n<div id=\"tab-changelog\" class=\"plugin-changelog section\">\n<h2 id=\"changelog-header\">Changelog<\/h2>\n<h4>11.5.4.2 \u2013 2025.02.18<\/h4>\n<ul>\n<li>Made calls to <code>php_uname()<\/code> in System Report conditional; some servers may remove support for this function for security reasons. Also replaced call to <code>phpversion()<\/code> with <code>PHP_VERSION<\/code> 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.<\/li>\n<\/ul>\n<h4>11.5.4.1 \u2013 2025.02.10<\/h4>\n<ul>\n<li>Refactored <code>r34ics_date()<\/code> to use <code>wp_date()<\/code> after applying its offset and other input standardizations, rather than duplicating the code of <code>wp_date()<\/code>. This also resolves an issue where in some rare cases, the passed-in timezone may not be handled correctly.<\/li>\n<li>Added missing event timezone inputs to <code>r34ics_date()<\/code> calls in the <code>R34ICS::event_description_html()<\/code> method and <code>r34ics_multiday_date_label()<\/code> function. Without timezones, date ranges for multi-day events could be one day \u201coff\u201d in the event descriptions and labels after the aforementioned refactoring of <code>r34ics_date()<\/code>.<\/li>\n<li>Fixed incorrect date display issues in <code>R34ICS::event_description_html()<\/code>. <em>Note: Version 11.5.4 was withdrawn due to this issue, which was discovered a few minutes after its release.<\/em><\/li>\n<li>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 <em>latest<\/em> ending date, which helps to reduce situations where events \u201cbreak\u201d between days in the layout when using <code>combinemultiday<\/code>.<\/li>\n<\/ul>\n<h4>11.5.3.2 \u2013 2025.02.07<\/h4>\n<ul>\n<li>Bug fix: Resolved possible fatal error caused if new <code>r34ics_i18n_locales()<\/code> function added in 11.5.3.1 runs on a logged-out front-end page.<\/li>\n<\/ul>\n<h4>11.5.3.1 \u2013 2025.02.06<\/h4>\n<ul>\n<li>Fixed bug with <code>reverse<\/code> and <code>pagination<\/code> on Basic and List views that would cause the wrong \u201cpage\u201d to display on load.<\/li>\n<li>i18n: Updated translation strings. Added logic to force the plugin\u2019s embedded translation files to take precedence over any downloaded community translation files in the <code>WP_LANG_DIR\/plugins<\/code> directory.<\/li>\n<\/ul>\n<h4>11.5.3 \u2013 2025.02.03<\/h4>\n<ul>\n<li>Fixed issue with pagination in list view that would include the next single-day event(s) on a \u201cpage\u201d when a multi-day event was the correctly counted \u201clast\u201d item on the page.<\/li>\n<li>Modified handling of <code>pagination=\"1\"<\/code> in Basic and List views, to literally mean 1 event, rather than being interpreted as a boolean \u201ctrue\u201d and defaulting to 5 events per page. Setting <code>pagination=\"true\"<\/code> will still default to 5 per page. List view also now omits the month\/year headers when displaying one event per page.<\/li>\n<li>Modified handling of <code>count<\/code> and <code>pagination<\/code> parameters to force positive integer values.<\/li>\n<\/ul>\n<h4>11.5.2.1 \u2013 2025.02.03<\/h4>\n<ul>\n<li>Added <code>r34ics_comparison_string()<\/code> function to process strings for comparison purposes. Used by features added to <code>R34ICS::r34ics_display_calendar_exclude_event()<\/code> in 11.5.2 to filter events by category, accounting for possible formatting issues with accented letters.<\/li>\n<li>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. <a target=\"_blank\" href=\"https:\/\/icscalendar.com\/icsdocs#columnlabels\" rel=\"nofollow ugc noopener\"><code>columnlabels<\/code><\/a> or <a target=\"_blank\" href=\"https:\/\/icscalendar.com\/icsdocs#extendmultiday\" rel=\"nofollow ugc noopener\"><code>extendmultiday<\/code><\/a>.<\/li>\n<\/ul>\n<h4>11.5.2 \u2013 2025.01.31<\/h4>\n<ul>\n<li>Added <code>category<\/code> attribute to allow filtering events by category. Multiple categories may be included, using the pipe character <code>|<\/code> as a delimiter. Category names used must exactly match the category names in the feed (case-insensitive). <em>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.<\/em> <strong>Note:<\/strong> This feature requires that your ICS feed data includes the <a target=\"_blank\" href=\"https:\/\/icalendar.org\/iCalendar-RFC-5545\/3-8-1-2-categories.html\" rel=\"nofollow ugc noopener\"><code>CATEGORIES<\/code><\/a> property, which is not widely supported by most popular calendar software.<\/li>\n<\/ul>\n<h4>11.5.1.3 \u2013 2025.01.22<\/h4>\n<ul>\n<li>Modified logic for <code>maskinfo<\/code> that would remove the info hover box on multi-day events with specified start and end times.<\/li>\n<\/ul>\n<h4>11.5.1.2 \u2013 2025.01.20<\/h4>\n<ul>\n<li>Miscellaneous:\n<ul>\n<li>Added <code>r34ics_ajax_bypass_nonce<\/code> status to System Report.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>11.5.1.1 \u2013 2025.01.08<\/h4>\n<ul>\n<li>Bug fixes:\n<ul>\n<li>Added logic to trim extraneous spaces from the beginning and end of all attribute values when parsing the shortcode, and in sanitization logic in <code>r34ics-ajax.php<\/code>.<\/li>\n<li>Added <code>r34ics_color_key_allowed()<\/code> function and updated <code>r34ics_select_allowed()<\/code> to merge custom allowed fields with <code>wp_kses_allowed_html('post')<\/code>. This resolves issues with the color key (legend) that were introduced with changes in v. 11.5.0 and 11.5.1.<\/li>\n<li>Changed <code>r34ics_minify_css()<\/code> handling of whitespace to resolve issues when output is fed through <code>wp_kses_post()<\/code>.<\/li>\n<li>Fixed duplicate description output that may result with ALTREP handling introduced in 11.5.1.<\/li>\n<li>Fixed handling of feed parsing failures that would cause a fatal error unless the <code>debug<\/code> parameter is set in the shortcode.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>11.5.1 \u2013 2025.01.07<\/h4>\n<ul>\n<li>Functional enhancements:\n<ul>\n<li>Added protected <code>R34ICS::_event_field_handling()<\/code> method to facilitate complex logic (i.e. too much to fit in one line of code) when assigning values in the <code>$event_item<\/code> array in <code>R34ICS::display_calendar()<\/code> and related functions. This includes the new <code>r34ics_event_field_handling<\/code> filter for additional external processing of event data. (If working with the filter, be aware that it is currently only applied to the <code>eventdesc<\/code> 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.<\/li>\n<\/ul>\n<\/li>\n<li>iCalendar spec support:\n<ul>\n<li>Added limited support for Thunderbird\u2019s use of the <a target=\"_blank\" href=\"https:\/\/icalendar.org\/iCalendar-RFC-5545\/3-2-1-alternate-text-representation.html\" rel=\"nofollow ugc noopener\">ALTREP<\/a> parameter in event descriptions. Thunderbird does not appear to conform to the spec \u2014 the <code>ALTREP<\/code> 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.<\/li>\n<\/ul>\n<\/li>\n<li>PHP deprecation notices:\n<ul>\n<li>Modified the <code>event_description_html()<\/code>, <code>event_label_html()<\/code> and <code>event_sublabel_html()<\/code> methods of <code>R34ICS<\/code> to return empty strings rather than null or false values when empty.<\/li>\n<li>Added <code>?: ''<\/code> empty string fallback value to all instances of <code>wp_kses_post()<\/code> added in version 11.5.0, to work around \u201cDeprecated: preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated\u201d warnings. This should technically be addressed within the WordPress core <code>wp_kses_no_null()<\/code> function. We have opened a Trac ticket. If the core function is modified to handle null values, the then-superfluous <code>?: ''<\/code> will be removed from these function calls in a future update.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>11.5.0 \u2013 2025.01.03<\/h4>\n<ul>\n<li>i18n:\n<ul>\n<li>Added <code>translators:<\/code> comments for each translation string containing placeholders.<\/li>\n<li>Changed text domain from <code>r34ics<\/code> to <code>ics-calendar<\/code> to conform with <a target=\"_blank\" href=\"https:\/\/developer.wordpress.org\/plugins\/internationalization\/how-to-internationalize-your-plugin\/#text-domains\" rel=\"nofollow ugc noopener\">WordPress Plugin Directory requirements<\/a>. <em>Translation files included within the plugin have been correspondingly updated, but if you are using third-party translations or a plugin such as <a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/say-what\/\" rel=\"ugc noopener\">Say What<\/a>, you may need to update them with the new text domain.<\/em><\/li>\n<li>Replaced <code>%s<\/code> translation string placeholders with <code>%1$s<\/code>.<\/li>\n<li>Replaced uses of unescaped <code>_e()<\/code> and <code>__()<\/code> functions with the corresponding escaped functions <code>esc_html_e()<\/code>, <code>esc_html__()<\/code>, <code>esc_attr_e()<\/code> and <code>esc_attr__()<\/code>, as appropriate.<\/li>\n<li>Updated all translation files to reflect the above changes.<\/li>\n<\/ul>\n<\/li>\n<li>Miscellaneous:\n<ul>\n<li>Added extra sanitization functionality to handling of form inputs on Settings page and <code>r34ics-ajax.php<\/code>.<\/li>\n<li>Added text escaping functions to dynamic plugin output in templates.<\/li>\n<li>Added <code>r34ics_select_allowed()<\/code> function.<\/li>\n<li>Fixed CSS padding issue with week numbers in month and week views.<\/li>\n<li>Replaced uses of certain standard PHP functions such as <code>json_encode()<\/code>, <code>mt_rand()<\/code>, <code>parse_url()<\/code> and <code>strip_tags()<\/code> with their WordPress-specific equivalents (e.g. <code>wp_json_encode()<\/code>, <code>wp_rand()<\/code>, <code>wp_parse_url()<\/code> and <code>wp_strip_tags()<\/code>).<\/li>\n<li>Updated handling of server variables in System Report.<\/li>\n<\/ul>\n<\/li>\n<li>Vendors:\n<ul>\n<li>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 <a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/plugin-check\" rel=\"ugc noopener\">Plugin Check<\/a> reporting them as coding errors).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>11.4.2 \u2013 2024.12.16<\/h4>\n<ul>\n<li>Added IP address resolution to ICS Feed URL Tester, to help troubleshoot network-related issues.<\/li>\n<li>Added box around ICS Feed URL Tester Results area.<\/li>\n<\/ul>\n<h4>11.4.1.2 \u2013 2024.12.14<\/h4>\n<ul>\n<li>Fixed fatal error introduced in 11.4.1.1 when the calendar is <em>not<\/em> empty.<\/li>\n<\/ul>\n<h4>11.4.1.1 \u2013 2024.12.14<\/h4>\n<ul>\n<li>Added empty string error handling in <code>r34ics_uniqid_url()<\/code> and <code>r34ics_url_uniqid()<\/code> functions.<\/li>\n<li>Fixed bug in <code>r34ics_is_empty_array()<\/code>. (Removed <code>is_scalar()<\/code> check in conditional.) Resolves issue of blank output on empty calendars, rather than the proper \u201cNo events found\u201d message displaying.<\/li>\n<\/ul>\n<h4>11.4.1 \u2013 2024.12.06<\/h4>\n<ul>\n<li>Bug fix: Reverted change from 11.4.0 that made <code>month<\/code> the default fallback value for <code>$view<\/code> if it is not passed into <code>R34ICS::shortcode_defaults_merge()<\/code> method because this caused incorrect default values to override custom values in some cases.<\/li>\n<li>CSS: Modified multi-day event date boxes in Basic view to have a stacked layout to preserve list alignment.<\/li>\n<\/ul>\n<h4>11.4.0 \u2013 2024.12.03<\/h4>\n<ul>\n<li>AJAX:\n<ul>\n<li>Added <strong>Bypass nonce on AJAX requests<\/strong> setting. <em>See note below.<\/em><\/li>\n<li>Refactored <code>r34ics-ajax.php<\/code> to remove redundant code and add validation of allowed shortcode attributes.<\/li>\n<li>Added <code>r34ics_shortcode_defaults_merge<\/code> filter, to allow <code>R34ICS::shortcode_defaults_merge()<\/code> to be used as a general method for retrieving the full list of valid shortcode attributes and their default values.<\/li>\n<\/ul>\n<\/li>\n<li>Miscellaneous:\n<ul>\n<li>Added <code>sanitize_url()<\/code> to <code>r34ics_uniqid_url()<\/code> and <code>r34ics_url_uniqid()<\/code> functions.<\/li>\n<li>Added new plugin settings to debugger output.<\/li>\n<li>Additional minor code refactoring.<\/li>\n<\/ul>\n<\/li>\n<li>i18n:\n<ul>\n<li>Updated translation strings.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><em><strong>Note on AJAX nonce:<\/strong> ICS Calendar AJAX loading uses a <a target=\"_blank\" href=\"https:\/\/developer.wordpress.org\/plugins\/javascript\/ajax\/#nonce\" rel=\"nofollow ugc noopener\">nonce<\/a>, per WordPress best practices for optimal database security. (The nonce is not strictly necessary in this case, as the plugin\u2019s AJAX calls have only limited ability to interact with the database, and all AJAX POST data is validated and sanitized.) <strong>In general we recommend leaving the nonce validation in place.<\/strong> However, we have found that some caching plugins \u2014 particularly LiteSpeed Cache \u2014 may cache the nonce code with your page content, causing calendars to fail to load after the nonce expires. Turn on this setting to bypass ICS Calendar\u2019s AJAX nonce validation.<\/em><\/p>\n<h4>11.3.7 \u2013 2024.11.18<\/h4>\n<ul>\n<li>Added <code>class_exists()<\/code> check to <code>R34ICS<\/code> class.<\/li>\n<li>Added <code>ua<\/code> shortcode attribute, to allow for a custom user agent string on requests. May be useful if your source server is rejecting ICS Calendar\u2019s requests. Set to <code>true<\/code> to use a preselected real user agent string, or enter a custom string of your choosing. (Custom strings must be at least 6 characters.) If omitted or set to <code>false<\/code>, ICS Calendar\u2019s default user agent string will be used for the request. <em>Note: This parameter has no effect if the <strong>Use legacy feed request method<\/strong> setting is turned on.<\/em><\/li>\n<li>Standardized handling of all admin notices using <code>r34ics_deferred_admin_notices()<\/code> function, and modified some notices to be dismissible.<\/li>\n<li>Minor code refactoring.<\/li>\n<li>Vendors: Restored <code>persist-admin-notices-dismissal<\/code>, previously removed in version 9.8.0 because it wasn\u2019t being used.<\/li>\n<li>i18n: Updated translation strings.<\/li>\n<\/ul>\n<h4>11.3.6.1 \u2013 2024.11.11<\/h4>\n<ul>\n<li>Admin: Fixed HTML formatting issue in admin page sidebar.<\/li>\n<li>i18n: Added Czech translations.<\/li>\n<\/ul>\n<h4>11.3.5.1 \u2013 2024.11.06<\/h4>\n<ul>\n<li>Added <code>r34ics_admin_utilities_more<\/code> action.<\/li>\n<\/ul>\n<h4>11.3.5 \u2013 2024.11.05<\/h4>\n<ul>\n<li>Basic and List views: Added <code>data-dow<\/code> and <code>data-wknum<\/code> attributes to each event in the list, allowing developers to customize the appearance of events based on the day of the week (<code>data-dow<\/code>) or week number (<code>data-wknum<\/code>).<\/li>\n<li>Updated support text and links.<\/li>\n<li>i18n: Updated translation strings.<\/li>\n<\/ul>\n<h4>11.3.4.4 \u2013 2024.10.15<\/h4>\n<ul>\n<li>Restored <code>load_plugin_textdomain()<\/code> call, as it does appear to be necessary in some situations. The call is now being made on the <code>init<\/code> action, which should prevent any WP 6.7 error messages. If you are receiving error messages or if some translations appear to have gone missing, please let us know in the <a target=\"_blank\" href=\"https:\/\/wordpress.org\/support\/plugin\/ics-calendar\/\" rel=\"ugc noopener\">support forums<\/a>.<\/li>\n<li>Minor refactoring of <code>ics-calendar.php<\/code> file.<\/li>\n<\/ul>\n<h4>11.3.4.3 \u2013 2024.10.09<\/h4>\n<ul>\n<li>Removed unnecessary <code>load_plugin_textdomain()<\/code> call, and set <code>$translate<\/code> input parameter to <code>false<\/code> on <code>get_plugin_data()<\/code> call, as these may cause PHP notices as of WordPress 6.7. See the <a target=\"_blank\" href=\"https:\/\/core.trac.wordpress.org\/ticket\/62154#comment:8\" rel=\"nofollow ugc noopener\" class=\"broken_link\">WordPress Trac<\/a> for more details.<\/li>\n<\/ul>\n<h4>11.3.4.2 \u2013 2024.10.01<\/h4>\n<ul>\n<li>System Report:\n<ul>\n<li>Added new ICS Calendar settings.<\/li>\n<li>Added relevant WordPress core settings.<\/li>\n<li>Alphabetized Active Plugins list.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>11.3.4.1 \u2013 2024.09.28<\/h4>\n<ul>\n<li>Modified <code>r34ics_ajax()<\/code> function\u2019s sanitization logic to use <code>wp_kses_post()<\/code> rather than <code>htmlspecialchars(strip_tags())<\/code>, which was causing some valid HTML to be stripped from the calendar output when using AJAX.<\/li>\n<\/ul>\n<h4>11.3.4 \u2013 2024.09.24<\/h4>\n<ul>\n<li>Lightbox:\n<ul>\n<li>Modified CSS to restrict lightbox dimensions on large displays. Lightbox now displays at a maximum of 800\u00d7600 pixels, centered in the window. (Applies only when using <code>toggle=\"lightbox\"<\/code>.)<\/li>\n<\/ul>\n<\/li>\n<li>Multi-day events:\n<ul>\n<li>Changed options for <code>extendmultiday<\/code> from true\/false to <code>overnight<\/code>, <code>allday<\/code>, <code>both<\/code> or empty. The previous true\/false values map to <code>allday<\/code> and empty. The new <code>overnight<\/code> value applies to \u201covernight\u201d events with specified start and end times. The <code>allday<\/code> value (along with the previous true value) works by the previous logic, and applies only to multi-day, all-day events, to address situations where feeds do not conform to the iCalendar spec in handling the end date of multi-day, all-day events. The default is false\/empty, with neither condition applying.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>11.3.3.2 \u2013 2024.09.18<\/h4>\n<ul>\n<li>Modified logic around the <code>nolink<\/code> parameter, to strip an event\u2019s URL from the array during the initial parsing process, rather than relying on later conditionals in templating functions, which in some cases would still show the link even if <code>nolink<\/code> was set.<\/li>\n<li>Added support for the vendor-specific <code>X-MICROSOFT-CDO-BUSYSTATUS<\/code> field as a fallback for the iCalendar spec-compliant <code>STATUS<\/code> field.<\/li>\n<\/ul>\n<h4>11.3.3.1 \u2013 2024.08.22<\/h4>\n<ul>\n<li>AJAX:\n<ul>\n<li>Improved error handling when AJAX request fails. Removed repeated attempts on failure, due to the nature of the error being tested for.<\/li>\n<li>CSS enhancements to approximate initial height allocated for the calendar, based on view. (Intended to improve Cumulative Layout Shift [CLS] scores with PageSpeed Insights.) Note: There is no way to precisely determine the height of the calendar before it\u2019s loaded.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>11.3.3 \u2013 2024.07.31<\/h4>\n<ul>\n<li>Changed height on AJAX container while loading from <code>32px<\/code> to <code>75vh<\/code> to reduce impact on Cumulative Layout Shift (CLS) scores with Google PageSpeed Insights.<\/li>\n<li>Modified <code>sametab<\/code> parameter to support three values: <code>local<\/code>, <code>all<\/code>, and <code>none<\/code>. The default <code>local<\/code> option is the same default behavior as before (when the parameter is omitted altogether), <code>all<\/code> is equivalent to the previous <code>true<\/code> value, and <code>none<\/code> is a new option that will force <em>all<\/em> event links to open in a new tab. <em>Existing calendars do not need to be modified; the old values will continue to function as before.<\/em><\/li>\n<li>Removed logic to insert <code>.offsite-link<\/code> CSS class in links that open in new tabs, since it was not being used anywhere in the plugin. If you have custom CSS that depends on this class, use this equivalent selector: <code>.ics-calendar a[target=\"_blank\"]<\/code><\/li>\n<li>Reverted change to conditional logic for events spanning two days, introduced in 11.3.2.1, because it is causing more problems than it is fixing. A new parameter will be introduced in the next update to make the 11.3.2.1 change optional for the smaller number of users who will benefit from it.<\/li>\n<\/ul>\n<h4>11.3.2.1 \u2013 2024.07.19<\/h4>\n<ul>\n<li>Changed names of settings actions to replace <code>admin_options<\/code> with <code>settings<\/code> for consistency with changes in 11.3.2.<\/li>\n<li>Modified logic in some calendar rendering functions to prevent them from running unnecessarily and slowing down the Block Editor.<\/li>\n<li>Removed a conditional that treated events spanning two days, with start and end times, as one-day events rather than multi-day events. This older logic was obviated by subsequent changes in the plugin\u2019s handling of multi-day events, but some users may be expecting the previous functionality. Please use the <a target=\"_blank\" href=\"https:\/\/wordpress.org\/support\/plugin\/ics-calendar\/\" rel=\"ugc noopener\">WordPress Support Forums<\/a> to report any issues.<\/li>\n<\/ul>\n<h4>11.3.2 \u2013 2024.07.08<\/h4>\n<ul>\n<li>Renamed and relabeled \u201cadmin-options\u201d to \u201csettings\u201d for consistency and clarity in future code updates.<\/li>\n<li>Added <strong>Increase memory limit when rendering calendars<\/strong> setting, to allow for adjusting the system memory limit specifically when parsing calendar data. (Also added related <code>r34ics_memory_limit_mb()<\/code> and <code>r34ics_memory_limit_select()<\/code> functions.)<\/li>\n<li>Bug fix: Added missing <code>r34ics_display_calendar_event_item<\/code> filter on certain multi-day events.<\/li>\n<li>i18n: Updated translation strings.<\/li>\n<\/ul>\n<h4>11.3.1 \u2013 2024.07.03<\/h4>\n<ul>\n<li>jQuery:\n<ul>\n<li>Modified the <code>r34ics_init_start<\/code> and <code>r34ics_init_end<\/code> custom events to pass an <code>elem<\/code> parameter, containing the DOM object that called the <code>r34ics_init()<\/code> function. On calendars <em>not<\/em> loaded via AJAX, the function runs on initial page load, and the value passed is null. When the calendar <em>is<\/em> loaded via AJAX, the object is the <code>div.r34ics-ajax-container<\/code> element for that calendar. This allows custom functions using this event to have access to the properties of the DOM element, including the <code>id<\/code> attribute, so developers can write calendar-specific JavaScript.<\/li>\n<\/ul>\n<\/li>\n<li>Miscellaneous:\n<ul>\n<li>Standardized all checks for ICS Calendar Pro to use <code>class_exists()<\/code> and removed some ICS Calendar Pro-specific JavaScript by using the <code>r34ics_init_end<\/code> event.<\/li>\n<\/ul>\n<\/li>\n<li>i18n: Fixed incorrect text domain for translation strings in admin sidebar, and updated affected translation files.<\/li>\n<\/ul>\n<h4>11.3.0.1 \u2013 2024.06.27<\/h4>\n<ul>\n<li>Updated admin page to address possible issue of tabs not working.<\/li>\n<li>Added new plugin settings to System Report.<\/li>\n<li>Added <code>r34ics_raw_feed_strip_dtend_none()<\/code> function (using the <code>r34ics_display_calendar_preprocess_raw_feed<\/code> filter) to handle edge cases where feeds include the invalid <code>DTEND:None<\/code>. (This is an identified issue with easyVerein calendars.)<\/li>\n<\/ul>\n<h4>11.3.0 \u2013 2024.06.13<\/h4>\n<ul>\n<li>Admin:\n<ul>\n<li>Fixed minor issue with ICS Feed URL Tester changes in version 11.2.2 that prevented display of the tested URL after submitting.<\/li>\n<li>Reorganized Settings tab with options grouped under subheadings.<\/li>\n<\/ul>\n<\/li>\n<li>Basic Authentication:\n<ul>\n<li>Added support for including HTTP Basic Authentication user\/pass parameters directly in the feed URL in the shortcode, in addition to the previous constant-based method. <em>This approach is still discouraged,<\/em> since it involves putting the credentials directly in the shortcode and could potentially expose those credentials publicly if the plugin is deactivated, since WordPress outputs the text of any undefined shortcodes directly on the page. But <em>considering that HTTP Basic Authentication is inherently insecure,<\/em> this should not be a significant issue in most cases. If you are concerned about the confidentiality of your basic auth credentials, please continue to use the old approach. (Note: This change only applies to the new feed request method introduced in version 11, so it will not work if the <strong>Use legacy feed request method<\/strong> option is turned on. When using the legacy method, you <em>must<\/em> use the <code>basicauth<\/code> parameter in conjunction with the <code>R34ICS_FEED_BASICAUTH<\/code> constant in your <code>wp-config.php<\/code> file.)<\/li>\n<\/ul>\n<\/li>\n<li>CSS:\n<ul>\n<li>Modified CSS for new <code>feedlabelindesc<\/code> so feed color dot only appears in event details hover box, and not in inline descriptions; added styling for feed labels in lightbox.<\/li>\n<\/ul>\n<\/li>\n<li>Developer:\n<ul>\n<li>Added <a target=\"_blank\" href=\"https:\/\/icscalendar.com\/developer\/#r34ics_display_calendar_event_item\" rel=\"nofollow ugc noopener\"><code>r34ics_display_calendar_event_item<\/code><\/a> filter. This filter runs immediately before a parsed event gets added to the data array for the calendar, allowing you to modify any event details as needed. This is very similar to our second example use case for the existing <a target=\"_blank\" href=\"https:\/\/icscalendar.com\/developer\/#r34ics_display_calendar_filter_ics_data\" rel=\"nofollow ugc noopener\"><code>r34ics_display_calendar_filter_ics_data<\/code><\/a> filter, minus the need for five nested <code>foreach<\/code> loops!<\/li>\n<\/ul>\n<\/li>\n<li>Event details hover\/lightbox:\n<ul>\n<li>Moved recurrence description to top, below time.<\/li>\n<li>Changed HTML wrapper for <code>img<\/code> from <code>div<\/code> to <code>figure<\/code>.<\/li>\n<\/ul>\n<\/li>\n<li>Miscellaneous:\n<ul>\n<li>Changed language code in iCalendar output for <code>eventdl<\/code> to reflect site locale instead of hardcoding <code>EN<\/code>.<\/li>\n<\/ul>\n<\/li>\n<li>Vendors:\n<ul>\n<li>Updated embedded ics-parser library to latest version (3.4.0+, up through commit <a target=\"_blank\" href=\"https:\/\/github.com\/u01jmg3\/ics-parser\/commit\/7286ce0ff37d5123094ffc8b8426d9dfcccca7f9\" rel=\"nofollow ugc noopener\">7286ce0<\/a>.)<\/li>\n<\/ul>\n<\/li>\n<li>i18n: Updated translation strings.<\/li>\n<li>Bumped \u2018tested up to\u2019 to 6.6.<\/li>\n<\/ul>\n<h4>11.2.2 \u2013 2024.06.07<\/h4>\n<ul>\n<li>Admin:\n<ul>\n<li>ICS Feed URL Tester enhancements. Added suggestions for handling some common situations that may cause a feed request to fail or return incorrect results.<\/li>\n<li>CSS refinements.<\/li>\n<li>Fixed a bug that caused ICS Feed URL Tester to always return an unknown error after changes introduced in version 11.1.0.<\/li>\n<li>Updated action links on Plugins page.<\/li>\n<\/ul>\n<\/li>\n<li>Shortcode:\n<ul>\n<li>Added <code>feedlabelindesc<\/code> parameter and related functionality.<\/li>\n<\/ul>\n<\/li>\n<li>Miscellaneous:\n<ul>\n<li>Added <code>R34ICS::shortcode_feed_array_params<\/code> property and logic to split pipe-delimited, feed-related parameters into arrays for easier logic elsewhere, plus related functionality, including <code>r34ics_shortcode_feed_array_params<\/code> filter. (This is used by <code>feedlabelindesc<\/code> and may be used by other future enhancements.)<\/li>\n<li>Modified <code>r34ics_has_desc()<\/code> function to support <code>feedlabelindesc<\/code>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>11.2.1 \u2013 2024.05.30<\/h4>\n<ul>\n<li>Shortcode:\n<ul>\n<li>Added <code>eventlocaltime<\/code> parameter. Will display all times in the local timezone of the individual event, if applicable. Note: When this parameter is used, the timezone abbreviation <code>T<\/code> will automatically be appended to the <code>timeformat<\/code> parameter while parsing the shortcode.<\/li>\n<li>Added support for <code>T<\/code> (timezone abbreviation) in <code>timeformat<\/code> parameter. Note: Currently only supports placing <code>T<\/code> at the end of the string. (The timezone abbreviation will be inserted at the end of the time output, regardless of where <code>T<\/code> appears in the <code>timeformat<\/code> string.)<\/li>\n<\/ul>\n<\/li>\n<li>Admin:\n<ul>\n<li>Reordered Settings tab items.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>11.2.0 \u2013 2024.05.29<\/h4>\n<ul>\n<li>Admin:\n<ul>\n<li>Fixed issue after introduction of tabbed layout on ICS Calendar admin page that would cause the wrong tab to load after clicking buttons on the Utilities tab.<\/li>\n<li>Added \u201cSystem Report\u201d link in sidebar.<\/li>\n<\/ul>\n<\/li>\n<li>Shortcode:\n<ul>\n<li>Added <code>fulldateintable<\/code> parameter. By default, month and list views show only the day number in the table on desktop breakpoints, and use the date format defined by the <code>format<\/code> parameter for mobile breakpoints. When <code>fulldateintable=\"true\"<\/code> is set, the <code>format<\/code> value will be used to display the date in the table on desktop as well.<\/li>\n<\/ul>\n<\/li>\n<li>Miscellaneous:\n<ul>\n<li>Added check for <code>R34ICS<\/code> class already being defined, to prevent a potential fatal error on plugin activation.<\/li>\n<li>Added list of valid view names to allow fallback to month view if an invalid name is used. Use the new <code>r34ics_views<\/code> filter to add any custom view template names to the list.<\/li>\n<li>Modified loading logic to run <code>r34ics_update()<\/code> if the version number has <em>changed<\/em>, not just if it has increased.<\/li>\n<li>Updated protected properties of the <code>R34ICS<\/code> class.<\/li>\n<\/ul>\n<\/li>\n<li>Hotfix:\n<ul>\n<li>Modified CSS to prevent display of AJAX \u201cloading\u201d animation being stuck after the calendar loads.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>11.1.0 \u2013 2024.05.22<\/h4>\n<ul>\n<li>Admin:\n<ul>\n<li>Redesigned admin screen with tabbed layout for improved usability, relabeled some elements, and updated links to User Guide documentation. Refactored associated code into discrete methods. Removed legacy JavaScript that was no longer in use.<\/li>\n<\/ul>\n<\/li>\n<li>AJAX:\n<ul>\n<li>Added new <strong>Always use AJAX to render calendars<\/strong> admin setting. This will automatically force all calendars on the site to render asynchronously using AJAX.<\/li>\n<li>Restructured AJAX rendering and added a JavaScript interval to automatically refresh all AJAX-loaded calendars on the same frequency as the site\u2019s configured <strong>Transient (cache) expiration<\/strong> setting. (Minimum of 300 seconds.) Provides a way for pages containing calendars to be left open indefinitely (e.g. for kiosk displays) and receive updates.<\/li>\n<\/ul>\n<\/li>\n<li>Parameters:\n<ul>\n<li>Added new <code>hidecancelledevents<\/code> and <code>hidetentativeevents<\/code> shortcode parameters. These hide events with a <code>STATUS<\/code> value of <code>CANCELLED<\/code> or <code>TENTATIVE<\/code>, respectively.<\/li>\n<\/ul>\n<\/li>\n<li>Miscellaneous:\n<ul>\n<li>Added fallback to get event URL from the URI property if it exists. The iCalendar spec includes a <a target=\"_blank\" href=\"https:\/\/icalendar.org\/iCalendar-RFC-5545\/3-3-13-uri.html\" rel=\"nofollow ugc noopener\">URI<\/a> property, but not a URL property. However in our practical experience the URL property is commonly used by calendar vendors.<\/li>\n<li>Replaced several instances of null coalescing operators (<code>?? null<\/code>) with short ternary operators (<code>?: ''<\/code>) setting empty strings rather than null values for event properties. This should not produce any noticeable changes in most cases, but may occasionally allow for values to be returned that have been missing in the output under the old logic.<\/li>\n<li>Updated the set of fields that are masked by the <code>maskinfo<\/code> parameter to account for changes in the ics-parser library.<\/li>\n<\/ul>\n<\/li>\n<li>i18n: Updated translation strings.<\/li>\n<\/ul>\n<h4>11.0.1.2 \u2013 2024.05.15<\/h4>\n<ul>\n<li>Added <code>R34ICS::get_list_style_views()<\/code> and <code>r34ics_list_style_views<\/code> filter to allow external addition of list-style views for certain conditional logic.<\/li>\n<li>Performance improvements: Narrowed rough parsed date ranges defined in <code>R34ICS::display_calendar_date_range()<\/code> to reduce memory usage and processing time for calendars with a large number of recurring events.<\/li>\n<li>Admin page layout adjustments.<\/li>\n<li>Debugging: Removed restriction that only reports dynamic peak of memory usage if debug level is set to 2 or higher.<\/li>\n<li>Bumped \u2018tested up to\u2019 version to 6.5.3.<\/li>\n<\/ul>\n<h4>11.0.1.1 \u2013 2024.05.02<\/h4>\n<ul>\n<li>Developer:\n<ul>\n<li>Added <code>r34ics_display_calendar_after_args<\/code> action.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>11.0.1 \u2013 2024.05.02<\/h4>\n<ul>\n<li>Basic\/list views:\n<ul>\n<li>Pagination: changed default pagination count to 5 instead of using <code>posts_per_page<\/code> site option; cast pagination value as integer when set; fixed missing <code>#<\/code> in previous\/next pagination URLs. Fixed two jQuery bugs.<\/li>\n<\/ul>\n<\/li>\n<li>Week view:\n<ul>\n<li>Modified change from version 11.0.0.3 to adapt when the window is resized between phone and non-phone breakpoints. (The previous fix depended on the size of the window on initial page load.)<\/li>\n<\/ul>\n<\/li>\n<li>Admin:\n<ul>\n<li>Added <code>r34ics_is_block_editor()<\/code> function, and logic to prevent unnecessary processing potentially occurring on Block Editor screens.<\/li>\n<\/ul>\n<\/li>\n<li>Developer:\n<ul>\n<li>Added two new actions: <code>r34ics_shortcode_before_display_calendar<\/code> and <code>r34ics_shortcode_after_display_calendar<\/code>. These actions fire off in <code>R34ICS::shortcode()<\/code> before and after the call to <code>R34ICS::display_calendar()<\/code>.<\/li>\n<li>Corrected <code>add_action()<\/code> to <code>add_filter()<\/code> for <code>r34ics_display_calendar_exclude_event<\/code> in <code>class-r34ics.php<\/code>.<\/li>\n<\/ul>\n<\/li>\n<li>Miscellaneous:\n<ul>\n<li>Removed logic to run <code>gzdecode()<\/code> in <code>R34ICS::_url_get_contents()<\/code> because <code>wp_remote_get()<\/code> already does that. Eliminates appearance of numerous related PHP warnings in log files.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>11.0.0.3 \u2013 2024.04.23<\/h4>\n<ul>\n<li>Week view:\n<ul>\n<li>Fixed JavaScript issue of containers not extending to the full width in mobile \u201clist\u201d-style layout when switching between weeks.<\/li>\n<\/ul>\n<\/li>\n<li>ICS feed request functionality:\n<ul>\n<li>Updated <code>R34ICS::_url_get_contents()<\/code> to address some additional edge case issues introduced with the switch to <code>wp_remote_get()<\/code> in version 11.0.0 that were not fully resolved by the 11.0.0.1 update. Specifically, added customized handling of 301 and 302 redirects to use the <code>Location<\/code> header returned in the response object, rather than relying on the built-in redirection in <code>wp_remote_get()<\/code>, which was causing some hosts (including Google Calendar) to reject the request.<\/li>\n<li>Added <strong>Use legacy feed request method<\/strong> option on settings page, and corresponding <code>R34ICS::_url_get_contents_legacy()<\/code> method. For sites that are still not successfully retrieving feeds with the fixes added in 11.0.0.1, this option reverts to using the old method for requesting feeds using cURL and fopen functions.<\/li>\n<li>Updated debugging tools for internal testing during development.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>(Note: Version 11.0.0.2 was intentionally removed due to a logistical issue.)<\/p>\n<h4>11.0.0.1 \u2013 2024.04.18<\/h4>\n<ul>\n<li>Fixes an issue with HTTP headers in the new method of retrieving ICS feeds. The issue was hotfixed approximately one hour after the initial release, but some sites may have picked up the update within that hour. This update also increases the timeout from 5 to 30 seconds, to address potential issues with retrieving very large ICS files.<\/li>\n<\/ul>\n<h4>11.0.0 \u2013 2024.04.18<\/h4>\n<p><strong>PLEASE NOTE: This version includes a significant rewrite of the function that retrieves the contents of ICS feed URLs. It is now using the built-in <code>wp_remote_get()<\/code> WordPress function (instead of PHP cURL and fopen functions as before), so it <em>should<\/em> be fully compatible with all existing installations. However, if you encounter any new issues, please visit the <a target=\"_blank\" href=\"https:\/\/wordpress.org\/support\/plugin\/ics-calendar\/\" rel=\"ugc noopener\">WordPress Support Forums<\/a> for assistance.<\/strong><\/p>\n<ul>\n<li>Admin Settings:\n<ul>\n<li>Added <strong>Allow access to these hostnames that resolve to reserved IP addresses<\/strong> setting. This allows sites to access calendar servers on the same physical IP address as the web server, or within the same internal network. Previously this needed to be handled using custom PHP code as outlined in <a target=\"_blank\" href=\"https:\/\/icscalendar.com\/how-to-retrieve-feed-urls-over-a-local-network-private-reserved-ip-addresses-in-ics-calendar-10-12-2-and-later\/\" rel=\"nofollow ugc noopener\">this blog post<\/a>.<\/li>\n<\/ul>\n<\/li>\n<li>Code Refactoring:\n<ul>\n<li>Replaced previous cURL and fopen logic with <code>wp_remote_get()<\/code> in <code>R34ICS::_url_get_contents()<\/code> method. Correspondingly, deprecated the <code>curlopts<\/code> and <code>method<\/code> parameters. <em>Note: The second and fourth parameters of the protected method <code>R34ICS::_url_get_contents()<\/code> were <strong>removed<\/strong> rather than deprecated. No external plugins should be using this method other than ICS Calendar Pro, which has been correspondingly updated.<\/em><\/li>\n<li>Removed admin notice checking for presence of cURL or fopen functions.<\/li>\n<\/ul>\n<\/li>\n<li>WordPress Playground:\n<ul>\n<li>Added <code>r34ics_is_playground()<\/code> function to detect if running in <a target=\"_blank\" href=\"https:\/\/playground.wordpress.net\" rel=\"nofollow ugc noopener\">WordPress Playground<\/a>.<\/li>\n<\/ul>\n<\/li>\n<li>Miscellaneous:\n<ul>\n<li>Added missing fourth parameter to <code>r34ics_event_description_html<\/code> action.<\/li>\n<li>Changed Room 34 Creative Services logo link on admin page sidebar.<\/li>\n<li>Fixed PHP warning in <code>r34ics_system_report()<\/code> in rare situations where <code>get_option('active_plugins')<\/code> returns a plugin that is not included in <code>get_plugins()<\/code>. (May occur if the plugin has been manually removed from the file system.)<\/li>\n<li>Modified <code>R34ICS::event_description_html()<\/code> to handle <code>$event['start_time']<\/code> and <code>$event['end_time']<\/code> as alternatives to <code>$event['start']<\/code> and <code>$event['end']<\/code>.<\/li>\n<li>Updated header details in <code>ics-calendar.php<\/code>.<\/li>\n<\/ul>\n<\/li>\n<li>a11y:\n<ul>\n<li>Changed CSS for <code>.ics-calendar-arrow-nav &gt; *.inactive<\/code> to completely hide inactive arrow navigation elements (e.g. \u201cPrevious\u201d while on first month, \u201cToday\u201d while on current month, etc.) rather than screening back their opacity. Modified jQuery corresponding to these elements to dynamically add <code>aria-hidden=\"true\"<\/code> when <code>inactive<\/code> class is added.<\/li>\n<\/ul>\n<\/li>\n<li>i18n:\n<ul>\n<li>Added and updated translation strings.<\/li>\n<\/ul>\n<\/li>\n<li>Bumped \u2018tested up to\u2019 version to 6.5.2.<\/li>\n<\/ul>\n<h4>Full Changelog<\/h4>\n<p><em>Changelog truncated here due to WordPress repository requirements.<\/em> Please see <code>changelog.txt<\/code> for older logs.<\/p>\n<\/div><\/div>\n<p><!-- .entry-content --><\/p>\n<p>\t<!-- .entry-meta --><br \/>\n<\/article>\n<p><br \/>\n<br \/><a href=\"https:\/\/wordpress.org\/plugins\/ics-calendar\/\" target=\"_blank\" rel=\"noopener\">Source link <\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>ICS Calendar By room34 Download Details Reviews Installation Development Support Description 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\u2019re already using! [&hellip;]<\/p>","protected":false},"author":293,"featured_media":4741,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"give_campaign_id":0,"footnotes":""},"categories":[43,39,40],"tags":[2033,3030],"class_list":["post-4740","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-commercial-plugin","category-lite-version","category-wp-plugin-solution","tag-calendar","tag-ics"],"acf":[],"fifu_image_url":"https:\/\/ps.w.org\/ics-calendar\/assets\/banner-772x250.png?rev=2864649","_links":{"self":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/posts\/4740","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/users\/293"}],"replies":[{"embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/comments?post=4740"}],"version-history":[{"count":0,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/posts\/4740\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/media\/4741"}],"wp:attachment":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/media?parent=4740"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/categories?post=4740"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/tags?post=4740"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}