| 开发者 | 3task |
|---|---|
| 更新时间 | 2026年10月21日 02:42 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
[threecal_post_date] shows the date with an "Add to my calendar" button, also automatically at the start or end of a postwp threecal import[threecal_submit] shows a form; every submission is saved as a draft that only you can publish. Spam protection without external services, optional e-mail of the submitter for questions, no IP address stored/wp-json/threecal/v1/events lists the upcoming events with ISO dates and time zone, place, organizer, categories and calendar file; filter by category and date, calendar pages announce the feed, and the settings hand you a block for your llms.txt[threecal]
Options: view (month, list), category, location, theme (default, accent, dark, site), show_filters, show_legend, show_subscribe, show_print, show_search, mobile_list (true/false).
With Options:
[threecal view="month" category="1"]
Event List:
[threecal_events limit="10"]
Options: view (list, grid, compact, poster), category, location, limit (per page), columns, show_past, show_pagination, show_search, month (current, next or a month such as 2026-10), day (one day such as 2026-10-24), running (number of days).
Events of One Day:
[threecal_events day="2026-10-24"]
A Whole Month, for Example "Releases in October":
[threecal_events view="poster" month="2026-10" category="1"]
Now Showing (Started Within the Last 40 Days):
[threecal_events view="poster" running="40" category="1"]
Posters with Post Images:
[threecal_events view="poster" category="1" columns="4"]
Date of a Post (with "Add to my calendar"):
[threecal_post_date]
Upcoming Events:
[threecal_upcoming limit="5"]
Mini Calendar (Perfect for Sidebars):
[threecal_mini]
Gutenberg Block
Simply search for "3task Calendar" in the block inserter to add a calendar to any page or post.
No feature locks
3task Calendar works completely on its own. Every feature in this plugin is unlocked.
/wp-content/plugins/3task-calendar/[threecal] shortcode or Gutenberg blockUse the shortcode [threecal] or add the 3task Calendar block from the Gutenberg editor.
Yes! Each shortcode or block is an independent calendar. You can filter by category.
Yes. The calendar toolbar and every event list carry a search field (hide it with show_search="false"). The search looks at title, description, location name and city, part of a word is enough, and upper or lower case does not matter, umlauts included. Results appear as a list grouped by day, together with the category filter if one is chosen. Enter searches, Escape clears the field, and screen readers get the number of results announced. Nothing is stored and no external service is involved. In the month view a click on a day number or on "+N more" shows the events of that day under the grid; "All events" closes the list again.
The calendar automatically adapts to your theme. You can also add custom CSS for further customization.
Yes. 3task Calendar is developed in Germany with privacy in mind and makes no external requests: no web fonts, no CDN, no tracking, no account. Visitor data stays on your site.
No. The calendar, the iCal files and the subscription feed are generated by your own site. The "Plan route" link only opens OpenStreetMap when a visitor clicks it.
Yes. Under 3task Calendar > Posts, switch on the date for posts, pages or a custom post type and give the field a name, for example "Release date". While writing, set the date in the editor sidebar. The post appears in the calendar once it is published and disappears again as a draft or in the trash.
No. Choose the field under "Date comes from". The list shows every field that holds dates, how many posts use it and an example value, so the right one is easy to spot. "Apply to existing posts" puts all of them into the calendar in one go. Dates like 2026-10-01, 20261001 (ACF), 01.10.2026 and Unix timestamps are read, and changes made by imports or other plugins are picked up automatically.
Choose "Only the month is known" when editing the event and pick the month. Visitors see "July 2027" with the note "Date to be announced". In the month view the event appears in a bar above the grid instead of on the 1st. It is left out of the iCal feed and gets no event schema, because Google requires a concrete date. Once the day is known, switch back to "The date is known"; this is not shown as "Postponed". The same option exists for dates from posts with their own date field.
Go to 3task Calendar > Import, upload the file and check the preview. Nothing is saved before you click "Run import". The file is UTF-8 (with or without byte order mark), the separator ; or , is found automatically, at most 2 MB. A sample file can be downloaded on the same page. Columns (first line, upper or lower case does not matter):
import_key: your own unique key; a row with an existing key updates that event, so a second import creates no duplicatestitle (required)start (required): 2027-07-10, 2027-07-10 20:00 or 2027-07 when only the month is knownend: 2027-07-12 or 2027-07-12 23:00all_day: 1 or 0url, descriptioncategory: name, several separated by |; missing categories are createdlocation_name, address, postal_code, city, country (two letters, e.g. DE): a location with the same name and city is used againstatus: draft, publish or cancelled; overrides the status chosen on the import pageorganizer_name, organizer_url: who runs the event; leave empty if you only list itwp threecal import events.csv --dry-run checks the file, wp threecal import events.csv --status=publish imports it.
Since 1.7.0 the settings page answers this per event: the schema check lists the next 20 events with "yes, place n of 5" or the reason (only the month known, no location, excluded category, removed by a filter, five places taken). Google only accepts events that take place at a real location on a concrete date, and it does not allow office hours or release dates as events. Events without a location or with only the month known get no markup, and every category can be excluded with "Not an event for search engines".
Only the organizer entered for the event under "Organizer" (or in the CSV columns organizer_name and organizer_url). Without an entry the markup has no organizer. Up to version 1.6.0 the plugin used the name of the website, which was wrong for events the site only lists. Developers can change the whole markup of an event with the filter threecal_event_schema; returning an empty value prints no markup for that event:
add_filter( 'threecal_event_schema', function ( $schema, $event, $page_url ) { if ( empty( $schema['organizer'] ) ) { $schema['organizer'] = array( '@type' => 'Organization', 'name' => get_bloginfo( 'name' ), 'url' => home_url( '/' ) ); } return $schema; }, 10, 3 );
Since 1.7.0 a link from an event to another website carries rel="nofollow noopener" and opens in a new window. Most calendars list events of other organisers, and search engines should not read every listing as your recommendation. You decide: Settings > "Links to other websites" switches the whole calendar to follow, and the category form switches single categories to follow, for example partners that link back to you. Developers can change the attributes per event with the filter threecal_event_link_attributes (since 1.6.3), and threecal_event_card_classes adds CSS classes to an event card:
add_filter( 'threecal_event_link_attributes', function ( $attrs, $event, $context ) { if ( 42 === (int) $event->id ) { $attrs['rel'] = 'sponsored noopener'; } return $attrs; }, 10, 3 );
Yes. Put [threecal_submit] on a page (attributes: title="…" for a heading, success="…" for your own thank-you text). A submission is saved as a draft with the typed location and an optional e-mail address of the submitter, so you can ask back. The event appears nowhere until you publish it. The event list has a "Submitted" view and the dashboard tells you how many are waiting. Spam protection works without external services: a hidden field that humans do not fill, a minimum time between showing and sending the form, a nonce, length limits and at most ten submissions per hour from one connection. The connection is only hashed for that hour and never stored with the event.
Yes: /wp-json/threecal/v1/events returns the upcoming events as JSON with ISO 8601 dates and time zone, place, organizer, categories, link and the calendar file of every event. Filters: ?category=slug, ?from=YYYY-MM-DD, ?to=YYYY-MM-DD, ?day=YYYY-MM-DD (one day, past days allowed), ?search=word (title, description, location, city), ?limit=200. Pages with a calendar announce the feed with <link rel="alternate" type="application/json">. An llms.txt in the root of your website tells AI search engines what matters on your site; the settings page gives you a ready block that names the feed and your calendar pages.
Yes. Paste the address of the event into "Event URL" and click "Fill in from this website". The plugin reads the schema.org event markup of that page (most festival and venue sites have it) or, if there is none, the Open Graph tags, and fills in title, date, description, organizer and location. Only empty fields are filled, so you keep what you typed. A location that already exists under Locations with the same name is selected; a new one is shown as a hint so you can add it.
Every calendar shows a "Subscribe to this calendar" link. It opens the calendar app via webcal://. The address can also be copied into Google Calendar ("From URL"). Use [threecal category="2"] to offer a feed for one category only.
Choose a repeat pattern and an end date when editing an event. The plugin creates the single dates. Below the form, "Dates of this series" lists every date: cancel one (it stays visible, crossed out), restore it, remove it or edit it on its own.
Yes. Month navigation and the event popup use public read-only requests without a nonce, so cached pages keep working.
Please use the WordPress.org support forum for questions and bug reports.
wp threecal import <file.csv> [--dry-run] [--status=draft|publish]