GCalendar Events
A standards-first WordPress events calendar plugin
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/gweb2015/gcalendar/archive/refs/heads/main.zipA standards-first WordPress events calendar plugin with modern UI, accessibility features, and AWS S3 URL support.
Features
- Custom Post Type – Events stored as
gcalendar_eventwith full WordPress integration - Query Loop Block Compatible – Supports WordPress Gutenberg Query Loop Block for custom queries, filtering, and sorting
- Featured Images – Full featured image support on all events
- Gutenberg Block – Server-side rendered
gcalendar/events-listblock - Shortcodes – Multiple shortcodes for flexible event display:
[gcalendar_events]– Event list with filtering and sorting[gcalendar_fullcalendar]– Interactive calendar view with FullCalendar.js[gcalendar_ical_link]– iCal feed link[gcalendar_rss_feed]– RSS feed link
- Calendar Integration – Add events to Google Calendar, Outlook, Apple Calendar with iCal downloads
- iCal/ICS Support – RFC 2445 compliant iCal downloads for Google, Outlook, Apple Calendar, and generic readers
- RSS Feed – Subscribe to event updates via RSS
- Subscribe Form – Email subscription for event updates (stored as persistent custom post type)
- Timezone Support – Stores UTC, displays in site timezone with DST support
- S3 URL Support – Optional S3 attachment URL with post meta field
- Security – Nonces, capability checks, sanitization, and escaping throughout
- Accessibility – ARIA labels, semantic HTML, keyboard navigation
- i18n Ready – Text domain
gcalendarfor translation - No Custom Tables – Uses WordPress post types and meta, no custom database schema
Installation
- Download or clone the plugin into
/wp-content/plugins/ - Activate via WordPress admin Plugins screen
- Events menu appears in admin
- Create events with dates, locations, organizer info
- Use shortcodes or Gutenberg blocks to display on your site
Usage
Shortcodes
Display Event List:
[gcalendar_events numberposts=10 category=campus-news]
Display Full Calendar:
[gcalendar_fullcalendar category=all default_view=dayGridMonth]
RSS Feed Link:
[gcalendar_rss_feed]
Subscription Form:
[gcalendar_subscribe_form]
Gutenberg Blocks
- GCalendar Events List (
gcalendar/events-list) – Dynamic block showing upcoming events - Query Loop Block – Full integration for custom queries. See
QUERY_LOOP_GUIDE.md
Custom Post Types
gcalendar_event
- Title, content, featured image
- Custom fields (via post meta):
start_date(UTC, format:Y-m-d H:i:s)end_date(UTC, format:Y-m-d H:i:s)location(text)organizer(text)ticket_url(URL)s3_url(AWS S3 URL)
- Taxonomies:
gcalendar_event_category - Custom Statuses:
approved,pending_marketing,pending_student_affairs
gcalendar_subscription
- Permanent storage of email subscriptions
- Post meta:
email(subscriber email)user_id(if subscriber is logged-in user)
- Automatically cleaned up when associated events are deleted
API
REST API
The plugin supports WordPress REST API:
Events Endpoint:
GET /wp-json/wp/v2/gcalendar_events
Query parameters:
per_page– Number of eventsorderby– Property to sort byorder– ASC or DESCmeta_query– Filter by post meta
Helper Functions
Get Subscribers for Event:
$subscribers = gcalendar_get_event_subscribers($event_id);
// Returns array of subscriber objects with email, date_subscribed, etc.
Get All iCal Events:
$events = gcalendar_get_ical_events();
// Returns array of events for iCal generation
Generate iCal:
$ical = gcalendar_generate_ical($events);
// Returns RFC 2445 compliant iCal string
Settings
Settings are managed in Plugins → GCalendar Settings (if admin panel enabled).
Current configurable options:
- Primary color
- Secondary color
- Text color
- Excerpt length
- Event count per page
Hooks
After Subscription:
do_action('gcalendar_user_subscribed', $email);
Event Query Args:
apply_filters('gcalendar_event_query_args', $query_args, $atts);
Compliance
This plugin adheres to WordPress.org Plugin Directory guidelines:
- ✅ No reliance on 3rd party services or phone-home behavior
- ✅ No automatic theme/plugin modifications
- ✅ No wpremote* timeout changes
- ✅ No WP_DEBUG, error_reporting, or display_errors modifications
- ✅ No removal of default WordPress roles
- ✅ No rewrite rule flushing or cache flushing
- ✅ No direct SQL queries; uses WordPress APIs
- ✅ No custom database tables
- ✅ No filesystem operations outside WordPress attachments
- ✅ No error_log usage
- ✅ Proper multisite handling for large networks
Requirements
- WordPress 5.0 or later
- PHP 7.4 or later
- jQuery (standard WordPress dependency)
- FullCalendar.js 6.1.8 (for calendar view)
Changelog
0.1.0
- Initial release
- Event post type with featured images
- Multiple shortcodes and Gutenberg block
- FullCalendar integration
- iCal download support
- Subscription system with persistent storage
- Query Loop Block compatibility
- Full accessibility support
License
GPLv2 or later – See license.txt
Support
For issues, feature requests, or contributions, please visit the GitHub repository.
Credits
- Built with WordPress best practices and standards
- FullCalendar.js integration
- RFC 2445 iCal compliance