{"id":374739,"date":"2026-09-25T06:25:48","date_gmt":"2026-09-25T06:25:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/klangagenda-calendar\/"},"modified":"2026-09-25T14:26:08","modified_gmt":"2026-09-25T14:26:08","slug":"klangagenda-calendar","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/klangagenda-calendar\/","author":23572953,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.5.1","stable_tag":"2.5.1","tested":"7.1.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Klangagenda Calendar","header_author":"KlangAgenda.de","header_description":"Kalenderplugin zur Einbindung von (Google, Apple\/iCloud, Microsoft 365\/Outlook oder Konzertmeister) als Agenda-Liste auf der Webseite. Kostenfrei zur Verf\u00fcgung gestellt von KlangAgenda.de.","assets_banners_color":"876585","last_updated":"2026-09-25 14:26:08","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/klangagenda.de\/plugin","header_author_uri":"https:\/\/klangagenda.de","rating":0,"author_block_rating":0,"active_installs":0,"downloads":47,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.4.0":{"tag":"2.4.0","author":"klangagenda","date":"2026-09-25 06:25:30","revision":3712483},"2.5.1":{"tag":"2.5.1","author":"klangagenda","date":"2026-09-25 14:26:08","revision":3713178}},"upgrade_notice":{"2.5.0":"<p>Adds settings for button corner radius, individual font size\/color for\ntitle, date, location and description, and optional month headings.\nExisting settings and appearance are preserved.<\/p>","2.4.0":"<p>Adds an on\/off switch and color setting for the per-event description, plus\na click-to-open popup for events when it&#039;s hidden. Existing settings\n(description shown, previous color) are preserved.<\/p>","2.3.2":"<p>Events now appear immediately after the automatic table repair from 2.3.1,\nwithout waiting for the next scheduled sync.<\/p>","2.3.1":"<p>Fixes a &quot;table doesn&#039;t exist&quot; database error that could occur after\nupdating the plugin by overwriting its files instead of deactivating\/\nreactivating it in WordPress.<\/p>","2.3.0":"<p>Adds three new selectable card-style calendar views plus a live preview\/\nselection UI in the backend. Existing settings and the current view\n(standard) are preserved.<\/p>","2.2.0":"<p>Legacy [google_agenda] shortcodes are removed \u2013 update any pages still\nusing them to [klangagenda] \/ [klangagenda_no_recurring] \/\n[klangagenda_konzerte] before updating.<\/p>","2.1.0":"<p>Sync interval changes from hourly to every 30 minutes; the frontend\nhint now reads &quot;orchestriert von klangagenda.de&quot; instead of &quot;powered\nby klangagenda.de&quot; and is off by default until actively enabled.\nExisting settings are preserved.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3712478,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3712478,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.4.0","2.5.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3713174,"resolution":"1","location":"assets","locale":"","width":1892,"height":1140},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3713174,"resolution":"2","location":"assets","locale":"","width":2516,"height":1538},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3713174,"resolution":"3","location":"assets","locale":"","width":2290,"height":1188},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3713174,"resolution":"4","location":"assets","locale":"","width":2716,"height":1422},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3713174,"resolution":"5","location":"assets","locale":"","width":2596,"height":1430},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3713174,"resolution":"6","location":"assets","locale":"","width":2826,"height":1536}},"screenshots":{"1":"Selectable calendar views","2":"Dashboard","3":"Calendar view 1","4":"Calendar view 2","5":"Calendar view 3","6":"Calendar view 4"}},"plugin_section":[],"plugin_tags":[5595,416,1486,4743,36367],"plugin_category":[40],"plugin_contributors":[282651],"plugin_business_model":[],"class_list":["post-374739","plugin","type-plugin","status-publish","hentry","plugin_tags-agenda","plugin_tags-calendar","plugin_tags-events","plugin_tags-google-calendar","plugin_tags-icloud","plugin_category-calendar-and-events","plugin_contributors-klangagenda","plugin_committers-klangagenda"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/klangagenda-calendar\/assets\/icon-256x256.png?rev=3712478","icon_2x":"https:\/\/ps.w.org\/klangagenda-calendar\/assets\/icon-256x256.png?rev=3712478","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/klangagenda-calendar\/assets\/screenshot-1.png?rev=3713174","caption":"Selectable calendar views"},{"src":"https:\/\/ps.w.org\/klangagenda-calendar\/assets\/screenshot-2.png?rev=3713174","caption":"Dashboard"},{"src":"https:\/\/ps.w.org\/klangagenda-calendar\/assets\/screenshot-3.png?rev=3713174","caption":"Calendar view 1"},{"src":"https:\/\/ps.w.org\/klangagenda-calendar\/assets\/screenshot-4.png?rev=3713174","caption":"Calendar view 2"},{"src":"https:\/\/ps.w.org\/klangagenda-calendar\/assets\/screenshot-5.png?rev=3713174","caption":"Calendar view 3"},{"src":"https:\/\/ps.w.org\/klangagenda-calendar\/assets\/screenshot-6.png?rev=3713174","caption":"Calendar view 4"}],"raw_content":"<!--section=description-->\n<p>Displays a calendar (Google Calendar, Apple Calendar\/iCloud, Microsoft 365 \/\nOutlook Calendar, or Konzertmeister \u2013 via iCal\/ICS link) as an agenda list,\nin the style of \"date box on the left, title\/date\/time\/location\/description\non the right\". No click behavior (no modal, no redirect) \u2013 text remains\nnormally selectable\/copyable.<\/p>\n\n<p>Provided free of charge by <a href=\"https:\/\/klangagenda.de\">KlangAgenda.de<\/a> \u2013 on\nKlangagenda.de you can promote your concerts free of charge across your\nregion, book rehearsal and concert venues, and offer your own space to\nothers to make better use of it.<\/p>\n\n<p>All settings (including a detailed step-by-step guide for each calendar\nprovider) are available in the WordPress backend under the dedicated\ntop-level menu \"Klangagenda Kalender\" (with its own calendar icon).<\/p>\n\n<h4>Shortcodes<\/h4>\n\n<p><strong>[klangagenda]<\/strong>\nShows all upcoming events (including recurring ones, e.g. weekly\nrehearsals).<\/p>\n\n<p><strong>[klangagenda_no_recurring]<\/strong>\nShows upcoming events WITHOUT recurring events (e.g. only\nconcerts\/special events, no weekly rehearsals).<\/p>\n\n<p><strong>[klangagenda_konzerte]<\/strong>\nShows only events whose title contains the word \"Konzert\" (German for\n\"concert\", case-insensitive), e.g. \"Winterkonzert\", \"Sommerkonzert\",\n\"Adventskonzert\". By default shows neither a date badge nor a\ndescription per event \u2013 instead, the description of the first (next)\nevent is shown once at the top of the whole list.<\/p>\n\n<p>By default, this shortcode shows no \"Buy tickets\" button per event.\nThe attribute <code>ticket_button=\"ja\"<\/code> turns this on. <code>beschreibung=\"nein\"<\/code>\nhides the intro description at the top, and <code>badge=\"ja\"<\/code> shows the date\nbadge per event:<\/p>\n\n<pre><code>[klangagenda_konzerte ticket_button=\"ja\" badge=\"ja\" beschreibung=\"nein\"]\n<\/code><\/pre>\n\n<p>\"(+)\"\/\"(-)\" markers (e.g. from Konzertmeister sync) are automatically\nstripped from event titles in all shortcodes.<\/p>\n\n<p>All shortcodes accept an optional <code>count<\/code> attribute, e.g.\n    [klangagenda count=\"5\"]. If omitted, the default count from the\nplugin settings is used.<\/p>\n\n<h4>Fixed date window per post (ab \/ bis)<\/h4>\n\n<p>Normally the shortcodes automatically show the next upcoming events\nfrom now on. For the typical workflow (one post per concert\ntour\/period; once it's over the post moves into the archive and a new\npost with the next dates is created), there are optional attributes\n    ab (from) and <code>bis<\/code> (until) (format YYYY-MM-DD):<\/p>\n\n<pre><code>[klangagenda_konzerte ab=\"2026-09-01\" bis=\"2026-09-14\"]\n<\/code><\/pre>\n\n<p>This makes this specific post permanently show exactly the events in\nthis time window \u2013 even once they're in the past. <code>ab<\/code> and <code>bis<\/code> can\nalso be used individually.<\/p>\n\n<h4>\"Load more\" button<\/h4>\n\n<p>[klangagenda] and [klangagenda_no_recurring] automatically show a\n\"Mehr Termine\" (load more) button below the list whenever more events\nare available beyond the currently shown count. Clicking it loads more\nevents via AJAX (no page reload). The button does not appear on the\n[klangagenda_konzerte] shortcode and can additionally be hidden\nexplicitly via <code>[klangagenda button=\"nein\"]<\/code>.<\/p>\n\n<h4>\"orchestriert von klangagenda.de\"<\/h4>\n\n<p>Below each event list (or below the \"load more\" button, if present),\na subtle, light-gray, centered note \"orchestriert von klangagenda.de\"\nappears by default, linking to https:\/\/klangagenda.de. This note can\nbe fully switched on or off in the backend under \"Klangagenda\nKalender\".<\/p>\n\n<h4>Recurring events (RRULE)<\/h4>\n\n<p>RRULE processing covers the common patterns (daily\/weekly\/monthly\/\nyearly, interval, count, end date, weekdays). Recurring events without\nan end date are pre-calculated up to the configured time horizon\n(default 12 months), and continued automatically on the next sync.<\/p>\n\n<h4>Ticket button<\/h4>\n\n<p>The button appears when the title contains \"konzert\" and the\ndescription contains an http(s) link. Only the first link found is\nused.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the whole \"klangagenda-calendar\" folder to\nwp-content\/plugins\/, or install the plugin directly via Dashboard -&gt;\nPlugins -&gt; Add New.<\/li>\n<li>Activate the plugin under \"Plugins\" in the WordPress dashboard.<\/li>\n<li>In the backend menu \"Klangagenda Kalender\" (top level, own icon),\nenter your calendar's subscription link under \"Kalenderlink\neinf\u00fcgen\". Google Calendar, Apple Calendar (iCloud), Microsoft 365 \/\nOutlook Calendar, and Konzertmeister calendars are supported \u2013\nboth https:\/\/ and webcal:\/\/ links work directly. A detailed\nstep-by-step guide for each provider is available in the\n\"Anleitung\" tab.<\/li>\n<li>Save -&gt; the plugin syncs immediately and then automatically every\n30 minutes via WP-Cron.<\/li>\n<li>Insert one of the shortcodes (e.g. <code>[klangagenda]<\/code>) into a page or\npost.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20cost%20anything%3F\"><h3>Does the plugin cost anything?<\/h3><\/dt>\n<dd><p>No, the plugin is free and provided by KlangAgenda.de.<\/p><\/dd>\n<dt id=\"which%20calendars%20are%20supported%3F\"><h3>Which calendars are supported?<\/h3><\/dt>\n<dd><p>Any calendar that offers a public iCal\/ICS subscription link: Google\nCalendar, Apple Calendar (iCloud), Microsoft 365 \/ Outlook Calendar,\nand Konzertmeister. Both https:\/\/ and webcal:\/\/ links are accepted\ndirectly.<\/p><\/dd>\n<dt id=\"how%20often%20are%20events%20updated%3F\"><h3>How often are events updated?<\/h3><\/dt>\n<dd><p>Automatically every 30 minutes via WP-Cron, plus immediately after\nsaving the settings or via the \"Jetzt synchronisieren\" button.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.5.1<\/h4>\n\n<ul>\n<li>Fix: increased spacing below the month heading (introduced in 2.5.0) so it\nno longer sits too close to the following event.<\/li>\n<\/ul>\n\n<h4>2.5.0<\/h4>\n\n<ul>\n<li>The corner radius of the \"Tickets kaufen\" and \"Mehr Termine\" buttons is now\nconfigurable.<\/li>\n<li>Font size and color for the event title, date, location and description\nare now individually configurable in the backend.<\/li>\n<li>Optional month headings (e.g. \"Oktober 2026\") can now be shown between\nevents whenever the month changes.<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>The per-event description can now be shown or hidden, and its text color\nis configurable in the backend.<\/li>\n<li>When the description is hidden, each event becomes clickable and opens a\npopup with the full event details (title, date, location, description)\ninstead - text selection\/copying on the rest of the list is unaffected.<\/li>\n<li>The \"Kalenderansicht\" preview cards now also show the description color\nand the popup behavior live.<\/li>\n<\/ul>\n\n<h4>2.3.2<\/h4>\n\n<ul>\n<li>Fix: after automatically (re-)creating the events table (see 2.3.1), the\ncalendar is now also synchronized immediately, instead of waiting for the\nnext scheduled sync (up to 30 minutes) or a manual click on \"Jetzt\nsynchronisieren\".<\/li>\n<\/ul>\n\n<h4>2.3.1<\/h4>\n\n<ul>\n<li>Fix: the events database table is now also created\/repaired on every\npage load if missing, not only on plugin activation. This prevents\n\"table doesn't exist\" errors when the plugin is updated by overwriting\nits files (e.g. via FTP or a hosting file manager) instead of being\ndeactivated\/reactivated through the WordPress admin.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Added three additional card-style calendar views (date on the right with\nan accent-colored left border, date on the left, and a full-height\naccent-colored date block) as alternatives to the standard date badge.<\/li>\n<li>New backend section \"Kalenderansicht\" under Settings to preview all\navailable views live (using the currently configured colors, even before\nsaving) and select the active one.<\/li>\n<li>New configurable card background color for the card-style views.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Removed the legacy <code>[google_agenda]<\/code> \/ <code>[google_agenda_no_recurring]<\/code>\n\/ <code>[google_agenda_konzerte]<\/code> shortcode aliases introduced in 2.0.0;\nplease switch any existing pages to <code>[klangagenda]<\/code> \/\n  [klangagenda_no_recurring] \/ <code>[klangagenda_konzerte]<\/code>.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Prepared for release in the WordPress plugin directory (full plugin\nheader, GPLv2 license, readme.txt in WordPress.org format, English\nreadme, dropped \"Plugin\" from the plugin name).<\/li>\n<li>All internal identifiers (classes, functions, options, database\ntable, asset handles, hooks) renamed to a distinctive <code>klanca_<\/code> \/\n  KLANCA_ prefix; settings from the predecessor plugin are migrated\nautomatically on activation.<\/li>\n<li>webcal:\/\/ links are stored\/displayed unchanged and automatically\nswitched to https:\/\/ internally when fetched.<\/li>\n<li>Sync interval changed to 30 minutes (custom WP-Cron interval).<\/li>\n<li>Frontend hint renamed to \"orchestriert von klangagenda.de\" and now\nhidden by default; site administrators must actively opt in via a\ncheckbox in the settings before it is shown.<\/li>\n<li>All CSS and JavaScript are now loaded via <code>wp_enqueue_style()<\/code> \/\n  wp_enqueue_script() instead of inline <code>&lt;style&gt;<\/code>\/<code>&lt;script&gt;<\/code> tags.<\/li>\n<li>Hardened output escaping and database queries per WordPress coding\nstandards.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Renamed to \"Klangagenda Calendar Plugin\" with its own top-level menu\nitem in the WordPress backend.<\/li>\n<li>Shortcodes renamed to [klangagenda], [klangagenda_no_recurring],\n[klangagenda_konzerte] (previous [google_agenda] shortcodes remain\nfunctional for backward compatibility).<\/li>\n<li>New \"Anleitung\" tab with step-by-step instructions per calendar\nprovider.<\/li>\n<li>Optional \"powered by\" hint on the frontend, toggleable in the\nbackend.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fix: moved asset registration from <code>plugins_loaded<\/code> to\n  wp_enqueue_scripts to avoid a WordPress notice (\"headers already\nsent\") when saving other forms.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Konzerte shortcode: toggles for ticket button, description, and date\nbadge; automatic removal of \"(+)\"\/\"(-)\" markers from event titles.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>\"Load more\" button with AJAX loading and loading animation.<\/li>\n<li>Configurable accent\/hover colors.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Separate concerts shortcode with automatic \"buy tickets\" button.<\/li>\n<li>Fixed date windows (<code>ab<\/code>\/<code>bis<\/code>) per post.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: Google Calendar agenda view with RRULE support.<\/li>\n<\/ul>","raw_excerpt":"Calendar plugin for embedding a Google, Apple\/iCloud, Microsoft 365\/Outlook or Konzertmeister calendar as an agenda list. Free from KlangAgenda.de.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/374739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=374739"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/klangagenda"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=374739"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=374739"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=374739"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=374739"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=374739"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=374739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}