Herodotus – On This Day

Description

Herodotus is a specialized tool for creating recurring historical events based on Day and Month, making it perfect for “This Day in History”, birthdays, anniversaries, or any annual recurring timeline.

Unlike the default WordPress behavior where posts are tied to a specific publication year, Herodotus introduces its own herodotus_post Custom Post Type. You simply pick a day and a month from the custom date picker in the block editor, and your post will automatically appear on that exact day every single year.

Key Features:

  • Dedicated Custom Post Type — keeps your regular blog posts completely separate from historical events.
  • Custom Taxonomy — group historical events into categories like “Science”, “Politics”, “Birthdays”, etc.
  • Annual Recursion — just set “May 15” and the post appears every May 15, forever.
  • Three Layouts — standard list layout for pages, compact layout for sidebars and widgets, and a plain text layout with no images at all.
  • Shortcode & Gutenberg Block — use [herodotus] or the included block to display events anywhere.
  • Year Support — set the year of the event for display purposes.
  • Year Badge — the historical year is displayed as a badge on each event card, so visitors immediately see when the event occurred.
  • BC/AD Era Support — mark events as BC or AD. BC events are sorted chronologically before AD events. The “AD” label is shown in the year badge when selected.
  • Category Filtering — display posts from a specific category using [herodotus category="history"].
  • Category Labels — category is displayed on each event card and on the single event page.
  • Hide Images — show posts as text-only using [herodotus show_image="false"].
  • Open Graph & Twitter Card — automatic meta tags for beautiful social media sharing previews.
  • Schema.org Markup — JSON-LD structured data (Article, Event, CollectionPage) for better SEO and Google rich results. Automatically disabled if Yoast SEO, RankMath, AIOSEO or The SEO Framework is active.
  • Timezone Aware — strictly respects your WordPress timezone settings.
  • WPML & Polylang Ready — includes wpml-config.xml for full multilingual compatibility.
  • Translation Ready — includes translations for Georgian, Russian, Ukrainian, French, German, Spanish, Italian and Turkish.
  • Caching — built-in transient caching for fast frontend performance.
  • Sortable Admin Columns — the posts list in the admin shows “Herodotus Date” and “Year” columns, both clickable to sort your events by date or year.
  • Quick Edit — change the day, month, year and era straight from the posts list, without opening the editor.
  • RSS Feed/herodotus/feed/ delivers today’s events, refreshed every day. Works with RSS readers and automation services.

Available Shortcode Attributes:

  • [herodotus] — show today’s posts using global settings.
  • [herodotus layout="compact"] — compact view, ideal for sidebars.
  • [herodotus layout="text"] — plain text list: no images, no card borders.
  • [herodotus limit="5"] — limit to first 5 posts.
  • [herodotus category="history"] — show posts from a specific category (use slug).
  • [herodotus excerpt_words="15"] — set custom excerpt length.
  • [herodotus show_image="false"] — hide images, show only title, excerpt and Read more.
  • [herodotus order="DESC"] — reverse sort order for this instance (overrides the global setting).
  • [herodotus_random] — show a random pick out of today’s events. Accepts limit, category, layout, excerpt_words and show_image.

Screenshots

Blocks

This plugin provides 1 block.

  • Herodotus – On This Day Display Herodotus posts by recurring day, month and year. Shows featured image (1:1), title, excerpt, and date.

Installation

  1. Upload the entire herodotus folder to the /wp-content/plugins/ directory.
  2. Activate the plugin through the Plugins menu in WordPress.
  3. A new Herodotus – On This Day menu item will appear in your WordPress admin sidebar.
  4. Go to Herodotus Add New and create your first historical event.
  5. In the editor, use the Herodotus Date metabox (right sidebar) to set the day, month and year.
  6. Place the shortcode [herodotus] or the Herodotus Events Gutenberg block on any page or widget area.

FAQ

What is Herodotus for?

Herodotus is designed for creating “On This Day in History” sections on your website. You create posts tied to a specific day and month, and they automatically appear every year on that date. It is ideal for history blogs, music, art & educational sites, museum websites, anniversary trackers, and birthday calendars.

Does this plugin modify my existing posts or pages?

No. Herodotus uses its own dedicated Custom Post Type (herodotus_post). Your standard WordPress Posts, Pages, and any other content remain completely untouched.

How is this different from regular WordPress posts?

Regular WordPress posts are tied to the date they were published and appear in chronological order. Herodotus posts are tied to a recurring day and month — they have no “publication date” in the traditional sense and will appear automatically every year on the same day.

Does it support leap years (February 29th)?

Yes. You can set February 29th as the date. On non-leap years, this post will not be shown, which is the correct and expected behavior.

How do I display today’s events on my site?

Use the shortcode [herodotus] in any post, page or text widget. Alternatively, use the included Herodotus Events Gutenberg block which you can find in the block inserter.

Can I show events from a specific category only?

Yes. Use the category attribute with the category slug: [herodotus category="science"]. You can create and manage categories under Herodotus Categories.

What is the compact layout and when should I use it?

The compact layout ([herodotus layout="compact"]) shows posts with a small square thumbnail, title and a short excerpt — without the category label or Read more button. It is designed specifically for sidebar widgets where space is limited.

Can I hide images and show only text?

Yes, in two ways. [herodotus show_image="false"] hides all images including the default placeholder, but keeps the card styling — background, border and rounded corners. [herodotus layout="text"] goes further: no images and no card chrome either, just a plain list of events separated by thin lines. Use the first when you want cards without pictures, the second when you want the events to blend into your page text.

What happens if a post has no featured image?

By default, a placeholder “No Image” graphic is shown. You can replace this placeholder with any image of your choice by going to Herodotus – On This Day Settings and uploading a custom Default Image.

How does the random event shortcode work?

[herodotus_random] shows a random pick out of the events for the current day. Where [herodotus] lists all of them, this one highlights a single event — useful for a sidebar block or a spot where only one item fits. Use limit for more than one, for example [herodotus_random limit="3"]. It accepts the same category, layout, excerpt_words and show_image attributes as the main shortcode. A new pick is made on every page load; if you use a full-page caching plugin, the pick will stay the same until that page cache expires.

Is there an RSS feed?

Yes. Your events are available at /herodotus/feed/ — for example https://example.com/herodotus/feed/. The feed carries the events for the current day, so it changes every morning. This makes it useful for RSS readers and for automation services such as IFTTT or Zapier. The number of events follows the Posts Limit setting.

Can I use multiple shortcodes on the same page?

Yes. Each shortcode instance is independent and can have its own layout, category, limit and other settings.

How does caching work?

Herodotus uses WordPress transients to cache query results. The default cache lifetime is 3600 seconds (1 hour). You can adjust this under Herodotus – On This Day Settings Advanced, or set it to 0 to disable caching entirely. The same screen has a Clear Cache Now button. The cache is automatically cleared whenever a Herodotus post is saved or deleted.

Is the plugin compatible with WPML and Polylang?

Yes. The plugin includes a wpml-config.xml file which automatically configures WPML to handle the custom post type, taxonomy and date meta fields correctly. Polylang works automatically as well since the CPT and taxonomy are registered with standard WordPress hooks. The cache key includes the current locale so different language versions are cached separately.

Is the plugin translation ready?

Yes. The plugin is fully internationalized. Translations are included for: Georgian (ka_GE), Russian (ru_RU), Ukrainian (uk), French (fr_FR), German (de_DE), Spanish (es_ES), Italian (it_IT) and Turkish (tr_TR). Additional translations can be contributed via the WordPress.org translation system (GlotPress).

I see a red warning in the post editor — what does it mean?

The red warning appears when a Herodotus post does not have a day, month or year set. All three fields are required — posts without a complete date will never appear on the frontend. Simply click the date field in the Herodotus Date metabox (right sidebar) to set the date.

I see a warning icon (⚠) in the posts list — what does it mean?

The ⚠ icon in the Herodotus Date or Year column means that post is missing date information and will not be shown on the frontend until the date is set.

Can I change a date without opening the editor?

Yes. Hover a row in the events list and click Quick Edit — the day, month, year and era appear next to the standard WordPress fields, already filled with the current values. This is the fastest way to correct dates when entering many events. Bulk Edit intentionally leaves the dates untouched, since a single date for several events is almost never what you want.

Can I sort events within the same date?

Yes. Under Herodotus – On This Day Settings General you can choose between A Z (alphabetical) and Z A (reverse alphabetical) sorting. Events are always grouped by date first, then sorted by your chosen order.

What data does the plugin store and what happens when I uninstall it?

The plugin stores Herodotus posts (as a custom post type), categories (as a custom taxonomy), plugin settings (in wp_options) and temporary cache (as transients). By default, all data is kept when the plugin is uninstalled. If you want all data to be permanently deleted on uninstall, enable the Remove Data on Uninstall option under Herodotus – On This Day Settings Advanced.

Does the plugin add Open Graph or Schema.org markup?

Yes. Herodotus automatically adds Open Graph and Twitter Card meta tags on single event pages and category archive pages, enabling rich previews when sharing links on Facebook, Twitter/X, Telegram and other platforms. It also outputs JSON-LD Schema.org structured data (Article, Event, CollectionPage) to help search engines understand your content. If Yoast SEO, RankMath, AIOSEO or The SEO Framework is active, Herodotus automatically skips its own tags to avoid duplicates.

Is the plugin compatible with page builders (Elementor, Divi, Beaver Builder)?

The shortcode [herodotus] works in any environment that supports standard WordPress shortcodes, including Elementor text/shortcode widgets, Divi Code modules and Beaver Builder HTML modules.

Does the plugin work with caching plugins (WP Super Cache, W3 Total Cache, LiteSpeed Cache)?

Yes. Herodotus has its own internal caching layer. It works alongside page-level caching plugins without conflict. Note that if you use aggressive full-page caching, the displayed date may be cached at the page level — consider excluding the pages with [herodotus] from full-page caching, or using a shorter cache TTL.

Reviews

May 11, 2026 1 reply
Excellent plugin – nothing extra, just the perfect tool for a specific task
Read all 1 review

Contributors & Developers

“Herodotus – On This Day” is open source software. The following people have contributed to this plugin.

Contributors

“Herodotus – On This Day” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “Herodotus – On This Day” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.5.0

  • New: Related events — an “Also on this day” block at the bottom of every single event page, listing other events that share the same date.
  • New: Random event shortcode[herodotus_random] highlights a random pick out of today’s events. Accepts limit, category, layout, excerpt_words and show_image.
  • New: Text layout[herodotus layout="text"] renders a plain list with no images and no card styling.
  • New: Quick Edit — the day, month, year and era can be changed straight from the events list, without opening the editor.
  • New: Dashboard widget — today’s events on the WordPress dashboard, with links to add a new event or view them all.
  • New: RSS feed/herodotus/feed/ now delivers the events of the current day instead of the most recently published ones.
  • New: Anniversary counter — “X years ago” on event cards and on the single event page. BC dates are counted across the missing year zero.
  • New: Clear Cache button under Advanced, to clear the plugin cache without waiting for it to expire.
  • Changed: the settings page moved from Settings to Herodotus – On This Day Settings, next to the events themselves.
  • Changed: the empty state now reads “No events for today.” instead of “No posts found for this date.”
  • Changed: plugin author is now Igrika.
  • Fixed: long titles in the compact layout are truncated with an ellipsis instead of overflowing the widget.
  • Fixed: the meta block on single event pages is passed through an allow-list before being returned by the content filter.
  • Performance: events are now matched through a single combined day+month key instead of one database join per date. Existing events are converted automatically on the first page load after the update.
  • Fixed: a date range that runs from December into January now keeps its events in chronological order instead of putting next year’s dates first.
  • Updated translations for all eight bundled languages: German, Spanish, French, Italian, Georgian, Russian, Ukrainian and Turkish.
  • Compatibility: the date picker in the editor now reads the selected date through the public jQuery UI API, so it keeps working with the jQuery UI 1.14 update shipped in WordPress 7.1.
  • Tested up to WordPress 7.1.

1.0.0

  • Initial public release.
  • Dedicated Custom Post Type (herodotus_post) and Custom Taxonomy (herodotus_category).
  • Shortcode [herodotus] with attributes: layout, limit, category, excerpt_words, show_image, order.
  • Two layouts: list (standard page layout) and compact (sidebar/widget layout).
  • Compact layout: long titles are truncated with ellipsis to keep the sidebar widget tidy.
  • Gutenberg block support.
  • Custom date metabox with day, month and year fields.
  • BC/AD era field in metabox — mark events as BC or AD. Chronological sorting: BC events sort before AD events using a signed sort key. The “AD” suffix is shown in the year badge when era is set to AD.
  • Red warning in metabox and ⚠ icon in posts list for posts missing date.
  • Built-in transient caching with configurable lifetime.
  • WPML compatibility via wpml-config.xml.
  • Polylang compatibility — cache key includes locale.
  • Plugin settings page: posts limit, sort order, excerpt length, default image, cache TTL, uninstall behavior.
  • Translation ready — includes translations for: French, German, Spanish, Italian, Turkish, Georgian, Ukrainian, Russian.