Free WordPress plugin · stable v1.8.0

Dynamic Month & Year into Posts

Keep dates current across WordPress without reopening old posts. Add the current-year shortcode once and the year in your content, titles, widgets, and supported SEO fields updates automatically.

I built this plugin for one narrow job: stop useful evergreen content from looking stale because a date changed. Shortcodes remain the primary and fastest workflow. Version 1.8.0 also makes the Block Editor experience easier, fixes timezone and countdown edge cases, and keeps the developer tools in sync with the same date engine.

Download free from WordPress.org →

Shortcode reference · Block Editor · Developer tools · Changelog · GitHub · Support


8,000+ active installs · WordPress 6.5+ · PHP 7.4+ · Tested through WordPress 7.0 · GPL-3.0-or-later · No settings page, tracking, ads, or premium tier

Rendered live on this page

The values below are generated by the plugin when this page loads. Copyable shortcode syntax stays literal in Code blocks throughout this guide.

[year]
[monthyear]
[date]
[season]
Live outputUse it for
2026Current year
July 2026Current month and year
July 27, 2026Today in the WordPress date format
SummerCurrent Northern Hemisphere season

New in 1.8.0

Safer dates and a better editor workflow

  • Site-timezone calculations: Shortcodes, blocks, bindings, REST responses, and WP-CLI now use one WordPress-aware date engine.
  • Daylight-saving safety: Calendar-day countdowns no longer drift by an hour or return the wrong number around DST changes.
  • Recurring countdowns: The Live Countdown block can repeat every year and handles leap-day events.
  • Searchable Insert Dynamic Date picker: Find established shortcodes by name, syntax, category, or purpose, then insert one without leaving the text toolbar.
  • Better block controls: Dynamic Date now previews annual dates, rollover days, text case, date formats, age formats, and event rules directly in the editor.
  • Block Bindings presets: WordPress 6.9+ shows ready-made choices for year, month, date, month and year, weekday, and Black Friday.
  • Scoped integrations: Title, excerpt, SEO, builder, schema, and related-post filters process this plugin’s shortcodes without executing unrelated shortcodes.
  • Release hardening: Automated tests now cover PHP 7.4, 8.2, and 8.5, WordPress 6.5 and latest, JavaScript, static analysis, packaging, timezones, recurrence, and rollover behavior.

No established shortcode was removed or renamed. Version 1.8.0 adds richer options to blocks, bindings, REST, and WP-CLI without turning those options into new public shortcode tags.

Primary workflow

Complete shortcode reference

The plugin registers 36 established shortcode tags. Attributes such as n, format, ordinal, rank, and region provide extra forms without replacing the original tags. Month and weekday names follow the language and timezone configured in WordPress.

Years

[year]          Current year
[year n="5"]    Five years from now
[year n="-3"]   Three years ago
[nyear]         Next year
[nnyear]        Year after next
[pyear]         Previous year
[ppyear]        Year before previous

Months

[month]     Current month
[cmonth]    Capitalized current month
[mon]       Short current month
[cmon]      Capitalized short month
[mm]        Zero-padded month number
[mn]        Month number without a leading zero
[nmonth]    Next month
[cnmonth]   Capitalized next month
[nmon]      Short next month
[cnmon]     Capitalized short next month
[pmonth]    Previous month
[cpmonth]   Capitalized previous month
[pmon]      Short previous month
[cpmon]     Capitalized short previous month

Combined dates and days

[date]          Today's full date
[monthyear]     Current month and year
[nmonthyear]    Next month and its year
[pmonthyear]    Previous month and its year
[dt]            Current day number
[nd]            Tomorrow's day number
[pd]            Yesterday's day number
[weekday]       Full weekday name
[wd]            Short weekday name

Post dates, events, countdowns, age, and seasons

[datepublished]                                  Current post's publication date
[datemodified]                                   Current post's modified date
[blackfriday]                                    This year's Black Friday date
[cybermonday]                                    This year's Cyber Monday date
[daysuntil date="2027-01-01"]                    Calendar days until a date
[dayssince date="2026-01-01"]                    Calendar days since a date
[age date="1990-05-15"]                         Age in complete years
[age date="1990-05-15" ordinal="true"]          Ordinal age; rank="true" is an alias
[age date="1990-05-15" format="ym"]             Years and months
[age date="1990-05-15" format="ymd"]            Years, months, and days
[season]                                         Northern Hemisphere season
[season region="south"]                          Southern Hemisphere season

The publication and modified-date shortcodes need a current post context. All other values use the WordPress site timezone. The season mapping is Spring (March-May), Summer (June-August), Fall (September-November), and Winter (December-February), reversed for the Southern Hemisphere.

Block Editor

Insert a date without memorizing syntax

Shortcodes still come first, but you no longer have to remember all of them. Select a Paragraph, Heading, or List, open Insert Dynamic Date from the formatting toolbar, search the catalog, and choose the established shortcode you need. The plugin highlights the inserted token in the editor while the front end renders only the value.

Four dedicated blocks

  • Dynamic Date: Choose a year, month, date, weekday, age, season, post date, event date, annual occurrence, or calculated date. Set offsets, rollover day, date format, text case, or an annual rule when that date type supports it.
  • Live Countdown: Count days until or since a target date. Optionally repeat an annual countdown so birthdays, anniversaries, and New Year timers roll forward automatically.
  • Published Date: Display the current post’s publication date with an optional prefix, suffix, or PHP date format.
  • Modified Date: Display the current post’s last modified date with the same formatting controls.

Block Bindings on WordPress 6.5+

Bind a core Paragraph, Heading, or Button directly to the dmyip/date source. WordPress 6.9+ shows editor presets for common values; WordPress 6.5 through 6.8 can still use a manually configured binding.

<!-- wp:paragraph {"metadata":{"bindings":{"content":{"source":"dmyip/date","args":{"type":"year"}}}}} -->
<p></p>
<!-- /wp:paragraph -->

Seven theme-neutral patterns

Start from Copyright Footer, Last Updated, Current Month Heading, Black Friday and Cyber Monday Dates, 30-Day Countdown, Recurring Birthday Countdown, or Recurring New Year Countdown. The patterns use core blocks and inherit the active theme instead of forcing a promotional design.

Four everyday Dynamic Dates patterns rendered in WordPress: Copyright Footer, Last Updated, Current Month Heading, and Black Friday and Cyber Monday Dates
Everyday patterns rendered with Twenty Twenty-Five.
Three countdown patterns rendered in WordPress: 30-Day Countdown, Recurring Birthday Countdown, and Recurring New Year Countdown
Countdown patterns rendered with Twenty Twenty-Five.

The editor workflow

These screenshots show the shortcode picker and the dedicated blocks inside the WordPress editor. Version 1.8.0 keeps the same workflow while adding picker search, clearer result counts, improved focus behavior, richer Dynamic Date controls, and responsive popover sizing.

Insert Dynamic Date picker in the WordPress Block Editor
Insert an established shortcode from the text formatting toolbar.
Dynamic Date block settings in the WordPress editor
Choose the date type and configure only the controls that apply.
Live Countdown block settings in the WordPress editor
Set a target, direction, label, and optional annual recurrence.

Developer tools

Use the same date engine outside post content

REST API

The public, read-only dmyip/v1 API returns the same site-timezone-aware values used by shortcodes and blocks.

GET /wp-json/dmyip/v1/dates
GET /wp-json/dmyip/v1/shortcodes
GET /wp-json/dmyip/v1/date/year?offset=-3
GET /wp-json/dmyip/v1/date/age_ymd?date=1990-05-15
GET /wp-json/dmyip/v1/render?shortcode=%5Byear%20n%3D-3%5D

WP-CLI

wp dmyip info
wp dmyip shortcode year --offset=5
wp dmyip shortcode age_ymd --date=1990-05-15
wp dmyip list --format=json
wp dmyip test

Theme and PHP templates

<?php echo do_shortcode( '[year]' ); ?>
<?php echo do_shortcode( '[age date="1990-05-15"]' ); ?>

Control title and excerpt processing

The dmyip_core_filters filter controls the_title, single_post_title, wp_title, the_excerpt, get_the_excerpt, and get_the_archive_title. All are enabled by default.

// Keep shortcodes in content and blocks, but disable all core filters.
add_filter( 'dmyip_core_filters', '__return_empty_array' );

// Disable title processing only.
add_filter( 'dmyip_core_filters', function ( $filters ) {
    $filters['the_title'] = false;
    return $filters;
} );

ACF fields are opt-in

The plugin does not execute shortcodes in ACF fields by default. If you control the field and trust its content, enable only the field type or field name you need.

add_filter( 'acf/format_value/type=text', 'do_shortcode' );
add_filter( 'acf/format_value/name=headline', 'do_shortcode' );

Compatibility

Works where WordPress content is rendered

SEO and metadata

  • Rank Math and Rank Math Pro: titles, descriptions, breadcrumbs, OpenGraph, and supported schema fields
  • Yoast SEO and Yoast SEO Premium: titles, descriptions, OpenGraph, and JSON-LD schema
  • SEOPress and SEOPress Pro: titles, descriptions, OpenGraph, and schema
  • SureRank and native WordPress titles where the surrounding tool applies WordPress filters

Tested workflows include the Block Editor, Classic Editor, Elementor, WPBakery, Visual Composer, Beaver Builder, Brizy, Oxygen, Bricks, GenerateBlocks, Greenshift, Kadence Blocks, Spectra, Otter Blocks, Jetpack Related Posts, Contextual Related Posts, and Intelly Related Posts. The output inherits the active theme, including Twenty Twenty themes, Astra, Neve, Hello, Kadence, GeneratePress, Blocksy, and OceanWP.

Some third-party fields deliberately strip shortcodes. That is a security or rendering decision in the host plugin, not a reason to enable global do_shortcode() filters. Prefer a documented integration, a selective field filter, a Dynamic Date block, or Block Bindings.

Performance and privacy

  • Shortcodes and Block Bindings load no front-end CSS or JavaScript
  • Date rendering does not write settings or content to the database
  • The Live Countdown loads a small Interactivity API module only on pages that use that block
  • No analytics, tracking, cookies, external requests, admin notices, license checks, or upsells
  • Compatible with page caching; the recurring countdown recalculates in the browser when an exact rollover matters
  • Localized through WordPress date and translation APIs

Installation

Install and use it

  1. Open Plugins → Add New Plugin in WordPress.
  2. Search for Dynamic Month & Year into Posts.
  3. Choose Install Now, then Activate.
  4. Type year in a post, page, heading, widget, title, or supported SEO field.

There is no setup wizard or options page. If you prefer a manual install, upload the plugin ZIP or extracted folder to /wp-content/plugins/, activate it, and start with the same shortcode.

Practical uses

  • Evergreen titles such as “Best WordPress Plugins for the current year”
  • Affiliate roundups and monthly deal pages
  • Copyright notices and legal-page dates
  • Black Friday, Cyber Monday, seasonal, and event content
  • Age, experience, anniversary, and tenure calculations
  • Launch countdowns and milestone tracking
  • Published and modified dates inside layouts
  • Headless apps and automations using REST or WP-CLI

FAQ

Frequently asked questions

Why would I need a dynamic date plugin?

Use it when a date should stay current without changing the meaning of the content. A shortcode can keep a year in an evergreen title, a month in a deal page, a copyright notice, an age, an anniversary or an event date current automatically. Do not use a dynamic date to make old or unreviewed information look freshly verified.

Did version 1.8.0 remove or replace the original shortcodes?

No. The original shortcode tags remain the primary public interface. Version 1.8.0 adds better editor search, block controls, recurrence, Block Bindings presets, REST and WP-CLI options without adding replacement public shortcode tags.

Do dynamic dates stay correct behind a caching plugin or CDN?

Shortcodes and bindings are rendered when WordPress generates the page, so a cache stores that rendered value until it expires or is purged. Use a sensible cache lifetime for daily or monthly values. The Live Countdown block recalculates through the Interactivity API, so annual countdowns can roll over without waiting for a full-page cache refresh.

Can I use the plugin without shortcodes?

Yes. Use the Dynamic Date, Live Countdown, Published Date or Modified Date block, bind a supported core block to dmyip/date on WordPress 6.5+, or fetch values through the public REST API. Shortcodes remain the simplest choice for a date inside a sentence, title or SEO field.

Does the plugin have settings?

No. Date language, timezone and default formatting come from WordPress. Individual shortcode attributes and block controls handle the cases that need a different format, offset, case, region or target date.

Will it slow down my site or collect data?

The shortcode and binding paths load no front-end assets and make no date-specific database query. The optional Live Countdown loads a small browser module only where used. The plugin has no analytics, tracking, external requests, settings table, license check, ads or upsells.

How do I get support or request a feature?

Use the support forum on WordPress.org for bugs and compatibility questions. Use the GitHub repository for source-level issues and contributions. You can also contact me from this site for a feature request. Include the WordPress, PHP and plugin versions plus a minimal example.

Release history

Changelog

1.8.0 · July 21, 2026

  • Added recurring, cache-aware Live Countdown behavior with leap-day handling and Block Bindings presets.
  • Made date calculations use the WordPress site timezone and calendar-day arithmetic across daylight-saving changes.
  • Improved the searchable shortcode picker, block previews, toolbar accessibility, responsive editor controls, and theme-neutral patterns.
  • Limited title, excerpt, builder, related-post, and SEO integration processing to this plugin’s shortcode tags.
  • Fixed the Countdown Interactivity API module build.
  • Raised the minimum WordPress version to 6.5.
  • Removed duplicate legacy runtime files and consolidated rendering around one date engine.
  • Added automated coverage for timezones, recurrence, rollover, shortcode compatibility, supported PHP versions, WordPress 6.5, and WordPress latest.
1.7 releases

1.7.4

  • Confirmed compatibility through WordPress 7.0.

1.7.3

  • Fixed season on legacy non-Composer installations.
  • Restored ordinal and rank attributes for age on the legacy path.
  • Removed duplicate OpenGraph, Elementor, Contextual Related Posts, and SEOPress filter registrations.

1.7.2 and 1.7.1

  • Added Bricks Builder integration.
  • Added Published Date and Modified Date Gutenberg blocks.
  • Added the dmyip_core_filters switch for title and excerpt processing.
  • Improved the GitHub release workflow and changelog generation.
  • Fixed large negative year offsets and unwanted year zero-padding.

1.7.0

  • Added the season shortcode with Northern and Southern Hemisphere support.
  • Added ordinal="true" and rank="true" to age, including correct 11th, 12th, and 13th handling.
1.6 and 1.5 releases

1.6.2 and 1.6.1

  • Improved PHP 7.4 compatibility.
  • Fixed countdown compatibility on PHP versions below 8.

1.6.0

  • Added age with years, years/months, full breakdown, and later ordinal formats.
  • Added the Dynamic Date and Live Countdown blocks, Block Bindings, REST API, WP-CLI, patterns, shortcode highlighting, modern namespaced code, PHPStan, PHPCS, and CI.
  • Added six patterns for age, birthdays, experience, New Year, milestones, and promotions.

1.5.5 to 1.5.1

  • Reworked, tested, and corrected Live Countdown behavior through several patch releases.

1.5.0

  • Added daysuntil and dayssince.
  • Added the Block Editor toolbar picker, editor reference panel, seven initial patterns, and automated GitHub releases.
1.4 and 1.3 releases
  • 1.4.0: General improvements.
  • 1.3.9: Refactored code and improved Rank Math JSON/excerpt handling.
  • 1.3.8: Added nd and pd.
  • 1.3.7: Added nmonthyear and pmonthyear.
  • 1.3.6: Added shortcode support to archive titles.
  • 1.3.5: Made Black Friday and Cyber Monday dynamic and added numeric offsets to year.
  • 1.3.4: Added datemodified and datepublished.
  • 1.3.3: Reverted a set of changes.
  • 1.3.2: Completed Yoast and SEOPress support and optimized the code.
  • 1.3.1: Corrected Black Friday and Cyber Monday dates.
  • 1.3.0: Added blackfriday, cybermonday, and Intelly Related Posts support.
1.2 releases
  • 1.2.9: Readme update.
  • 1.2.8: Corrected next-month behavior and stopped automatically rolling monthyear after the 28th.
  • 1.2.7: Fixed localized monthyear output.
  • 1.2.6: Added Elementor and Elementor Pro widget support.
  • 1.2.5: Added weekday and wd.
  • 1.2.4: Added Yoast JSON-LD support.
  • 1.2.3: Added the original end-of-month rollover behavior for monthyear, later revised in 1.2.8.
  • 1.2.2: Added capitalized month variants, nnyear, ppyear, monthyear, and better Rank Math Pro/Elementor compatibility.
  • 1.2.1: Added mm, mn, and Jetpack Related Posts support.
  • 1.2.0: Added next/previous month shortcodes and WordPress 5.8 support.
1.1 and 1.0 releases
  • 1.1.9: Removed a costly Rank Math description filter.
  • 1.1.8: Reverted part of the 1.1.6 changes.
  • 1.1.7: Bug fix.
  • 1.1.6: Added dt, Rank Math Product schema-description support, and WordPress date-format output for date.
  • 1.1.5: Added mon.
  • 1.1.2: Updated instructions and readme.
  • 1.1.1: Bug fixes.
  • 1.1.0: Added Rank Math OpenGraph support.
  • 1.0.9: Improved Yoast schema/OpenGraph support and removed the Rank Math recommendation.
  • 1.0.8: Added Contextual Related Posts support.
  • 1.0.7: Added SEOPress support.
  • 1.0.6: Added Yoast SEO support.
  • 1.0.5: Added multilingual output, date, and WordPress 5.6 compatibility.
  • 1.0.4: Optimization.
  • 1.0.3: Readme update.
  • 1.0.2: Added pyear and nyear.
  • 1.0.1: Fixed naming conflicts.
  • 1.0.0: First public version.

The source, issue tracker, and release packages are on GitHub. The canonical install is available from WordPress.org. The plugin is licensed under GPL v3 or later.

Need help? Use the WordPress.org support forum, open a GitHub issue, or request a feature.