{"id":296555,"date":"2026-04-16T08:19:00","date_gmt":"2026-04-16T08:19:00","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/caldav-calendar-viewer\/"},"modified":"2026-04-16T08:18:48","modified_gmt":"2026-04-16T08:18:48","slug":"caldav-calendar-viewer","status":"publish","type":"plugin","link":"https:\/\/fao.wordpress.org\/plugins\/caldav-calendar-viewer\/","author":23475117,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"5.6","requires_php":"8.0","requires_plugins":null,"header_name":"CalDav Calendar Viewer","header_author":"kaymanmk","header_description":"Displays events from an iCal (.ics) feed in a calendar view. Supports authenticated iCal endpoints.","assets_banners_color":"4a89ba","last_updated":"2026-04-16 08:18:48","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/gitlab.com\/kayman-mk\/caldav-calendar-viewer","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":91,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"kaymanmk","date":"2026-04-16 08:18:48"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3507758,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3507758,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":3507758,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3507758,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3507758,"resolution":"772x250","location":"assets","locale":""},"banner.svg":{"filename":"banner.svg","revision":3507758,"resolution":false,"location":"assets","locale":false}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Admin settings page with multiple feed configuration.","2":"7-day event list view on the front end.","3":"Event tooltip showing the event description on hover."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[416,1486,7103,6296,80],"plugin_category":[40,43],"plugin_contributors":[260346],"plugin_business_model":[],"class_list":["post-296555","plugin","type-plugin","status-publish","hentry","plugin_tags-calendar","plugin_tags-events","plugin_tags-ical","plugin_tags-ics","plugin_tags-shortcode","plugin_category-calendar-and-events","plugin_category-customization","plugin_contributors-kaymanmk","plugin_committers-kaymanmk"],"banners":{"banner":"https:\/\/ps.w.org\/caldav-calendar-viewer\/assets\/banner-772x250.png?rev=3507758","banner_2x":"https:\/\/ps.w.org\/caldav-calendar-viewer\/assets\/banner-1544x500.png?rev=3507758","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/caldav-calendar-viewer\/assets\/icon.svg?rev=3507758","icon":"https:\/\/ps.w.org\/caldav-calendar-viewer\/assets\/icon.svg?rev=3507758","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>CalDav Calendar Viewer fetches and displays events from any standard iCal (.ics) feed directly on your site using a simple shortcode. It supports multiple calendar feeds, each with its own URL and optional username\/password for authenticated endpoints.<\/p>\n\n<p><strong>Key Features:<\/strong><\/p>\n\n<ul>\n<li><strong>Multiple Calendar Feeds<\/strong> \u2013 Configure as many feeds as you need, each with a unique ID.<\/li>\n<li><strong>iCal \/ RFC 5545 Support<\/strong> \u2013 Parses standard <code>.ics<\/code> calendar feeds including all-day events, times, locations, and descriptions.<\/li>\n<li><strong>Recurring Events<\/strong> \u2013 Expands RRULE recurrences (DAILY, WEEKLY, MONTHLY, YEARLY) including BYDAY, BYMONTHDAY, INTERVAL, COUNT, UNTIL, and EXDATE.<\/li>\n<li><strong>DURATION Support<\/strong> \u2013 Derives the end time from a <code>DURATION<\/code> property when <code>DTEND<\/code> is absent.<\/li>\n<li><strong>Basic Authentication<\/strong> \u2013 Supply a username and password per feed for protected calendars.<\/li>\n<li><strong>Encrypted Credentials<\/strong> \u2013 Passwords are stored using AES-256-CBC encryption in the database.<\/li>\n<li><strong>Caching<\/strong> \u2013 Configurable cache lifetime reduces external HTTP requests (defaults to 1 hour).<\/li>\n<li><strong>Cache Management<\/strong> \u2013 View the number of currently cached feed entries and clear them with one click from the admin settings page.<\/li>\n<li><strong>Async Loading<\/strong> \u2013 Calendar events are fetched via AJAX so the containing page renders immediately.<\/li>\n<li><strong>Label \/ Category Filtering<\/strong> \u2013 Filter events by iCal <code>CATEGORIES<\/code> labels using the <code>label<\/code> shortcode attribute.\nAccepts a comma-separated list; <strong>all<\/strong> plain labels must be present on an event for it to be shown.\nPrefix a label with <code>!<\/code> to exclude events that carry that category. Matching is case-insensitive.<\/li>\n<li><strong>Clickable Events<\/strong> \u2013 Events that carry a <code>URL<\/code> property in the iCal feed are rendered as clickable links.<\/li>\n<li><strong>7-Day Rolling Window<\/strong> \u2013 Automatically fetches and displays only the next 7 days of events.<\/li>\n<li><strong>Responsive Event List<\/strong> \u2013 Clean event list layout that adapts to all screen sizes.<\/li>\n<li><strong>Event Tooltips<\/strong> \u2013 Hover over an event to see its description.<\/li>\n<li><strong>Description Prefix Filtering<\/strong> \u2013 Remove lines from event descriptions that start with configurable prefixes. Useful for hiding internal metadata added by calendar applications.<\/li>\n<\/ul>\n\n<h3>Configuration<\/h3>\n\n<p>Navigate to <strong>Settings \u2192 CalDav Calendar Viewer<\/strong> in the WordPress admin panel.<\/p>\n\n<h4>Adding a Feed<\/h4>\n\n<p>Click <strong>+ Add Feed<\/strong> and fill in:<\/p>\n\n<ul>\n<li><strong>Feed ID<\/strong> \u2013 A unique lowercase identifier (letters, numbers, hyphens, underscores) used in the shortcode.<\/li>\n<li><strong>iCal Feed URL<\/strong> \u2013 The full URL to the <code>.ics<\/code> calendar feed.<\/li>\n<li><strong>Username<\/strong> \u2013 Username for Basic Authentication. Leave blank for public feeds.<\/li>\n<li><strong>Password<\/strong> \u2013 Password for Basic Authentication. Stored encrypted. Leave blank to keep the current value.<\/li>\n<\/ul>\n\n<p>You can configure multiple feeds \u2014 each gets its own ID.<\/p>\n\n<h4>General Settings<\/h4>\n\n<ul>\n<li><strong>Cache Lifetime (seconds)<\/strong> \u2013 How long fetched calendar data is cached. Set to <code>0<\/code> to disable caching. Default: <code>3600<\/code> (1 hour).<\/li>\n<li><strong>Description Line Prefixes to Remove<\/strong> \u2013 Newline-separated list of prefixes. Any line in an event's description that starts with one of these prefixes is removed from the tooltip. Useful for hiding internal metadata added by calendar apps (e.g. <code>X-APPLE-<\/code>, <code>Reminder:<\/code>).<\/li>\n<\/ul>\n\n<h4>Cache Management<\/h4>\n\n<p>The settings page shows how many calendar feeds are currently cached. Use the <strong>Clear Cache<\/strong> button to delete all cached responses and force fresh fetches on the next page load.<\/p>\n\n<h3>Usage<\/h3>\n\n<h4>Basic Shortcode<\/h4>\n\n<pre><code>[caldcavi_calendar id=\"my-feed\"]\n<\/code><\/pre>\n\n<h4>Shortcode Attributes<\/h4>\n\n<ul>\n<li><code>id<\/code> (required) \u2013 The feed ID configured in <strong>Settings \u2192 CalDav Calendar Viewer<\/strong>.<\/li>\n<li><code>label<\/code> (optional) \u2013 A comma-separated list of iCal <code>CATEGORIES<\/code> values to filter events by. <strong>All<\/strong> plain labels\nmust be present on an event for it to be shown. Prefix a label with <code>!<\/code> to exclude events that carry that category.\nMatching is case-insensitive. Omit to show all events.<\/li>\n<\/ul>\n\n<h4>Examples<\/h4>\n\n<pre><code>[caldcavi_calendar id=\"team-calendar\"]\n\n[caldcavi_calendar id=\"hr-events\"]\n\n[caldcavi_calendar id=\"team-calendar\" label=\"Work\"]\n\n[caldcavi_calendar id=\"team-calendar\" label=\"Work,Important\"]\n\n[caldcavi_calendar id=\"team-calendar\" label=\"Work,!Cancelled\"]\n\n[caldcavi_calendar id=\"team-calendar\" label=\"!Private\"]\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>caldav-calendar-viewer<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install it directly through the WordPress plugin screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Go to <strong>Settings \u2192 CalDav Calendar Viewer<\/strong> to add your calendar feeds.<\/li>\n<li>Add the <code>[caldcavi_calendar id=\"your-feed-id\"]<\/code> shortcode to any page or post.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20ical%20formats%20are%20supported%3F\"><h3>What iCal formats are supported?<\/h3><\/dt>\n<dd><p>The plugin supports any standard iCal feed following RFC 5545 (<code>.ics<\/code> files). This includes feeds from Google Calendar, Microsoft Outlook\/Exchange, Nextcloud, Apple Calendar, and most other calendar applications.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20password-protected%20calendars%3F\"><h3>Does it work with password-protected calendars?<\/h3><\/dt>\n<dd><p>Yes. Each feed can be configured with a username and password for HTTP Basic Authentication. Credentials are stored encrypted using AES-256-CBC.<\/p><\/dd>\n<dt id=\"can%20i%20display%20multiple%20calendars%20on%20the%20same%20page%3F\"><h3>Can I display multiple calendars on the same page?<\/h3><\/dt>\n<dd><p>Yes. Configure multiple feeds in the settings, then use separate shortcodes:<\/p>\n\n<pre><code>[caldcavi_calendar id=\"team\"]\n[caldcavi_calendar id=\"holidays\"]\n<\/code><\/pre><\/dd>\n<dt id=\"can%20i%20filter%20events%20by%20category%20or%20label%3F\"><h3>Can I filter events by category or label?<\/h3><\/dt>\n<dd><p>Yes. Use the <code>label<\/code> attribute with a comma-separated list of iCal <code>CATEGORIES<\/code> values. <strong>All<\/strong> plain labels must be\npresent on an event for it to appear. Prefix a label with <code>!<\/code> to exclude events carrying that category.\nThe match is case-insensitive:<\/p>\n\n<pre><code>[caldcavi_calendar id=\"team\" label=\"Work\"]\n[caldcavi_calendar id=\"team\" label=\"Work,Important\"]\n<\/code><\/pre>\n\n<p>If your calendar application does not populate the <code>CATEGORIES<\/code> field, all events are shown regardless of the <code>label<\/code> attribute.<\/p><\/dd>\n<dt id=\"how%20often%20is%20the%20calendar%20data%20refreshed%3F\"><h3>How often is the calendar data refreshed?<\/h3><\/dt>\n<dd><p>By default, fetched data is cached for 1 hour (3600 seconds). You can change this in <strong>Settings \u2192 CalDav Calendar Viewer<\/strong> under Cache Lifetime. Set to <code>0<\/code> to fetch fresh data on every page load. You can also manually clear the cache using the <strong>Clear Cache<\/strong> button on the settings page.<\/p><\/dd>\n<dt id=\"what%20if%20openssl%20is%20not%20available%3F\"><h3>What if OpenSSL is not available?<\/h3><\/dt>\n<dd><p>The plugin falls back to Base64 encoding for password storage. For production use, the OpenSSL PHP extension is strongly recommended.<\/p><\/dd>\n<dt id=\"can%20i%20style%20the%20calendar%3F\"><h3>Can I style the calendar?<\/h3><\/dt>\n<dd><p>Yes. The calendar uses CSS classes prefixed with <code>caldcavi-<\/code> that you can override in your theme's stylesheet or via the WordPress Customizer's Additional CSS section.<\/p><\/dd>\n<dt id=\"how%20do%20i%20hide%20internal%20metadata%20lines%20from%20event%20tooltips%3F\"><h3>How do I hide internal metadata lines from event tooltips?<\/h3><\/dt>\n<dd><p>Enter line prefixes under <strong>Description Line Prefixes to Remove<\/strong> in the General Settings. Any description line that starts with one of those prefixes is stripped from the tooltip. For example, adding <code>X-APPLE-<\/code> will hide all lines starting with that prefix.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Displays events from iCal (.ics) feeds in a responsive list. Supports recurring events, multiple feeds with Basic Auth and encrypted credentials.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/296555","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=296555"}],"author":[{"embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kaymanmk"}],"wp:attachment":[{"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=296555"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=296555"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=296555"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=296555"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=296555"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=296555"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}