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 output | Use it for |
|---|---|
| 2026 | Current year |
| July 2026 | Current month and year |
| July 27, 2026 | Today in the WordPress date format |
| Summer | Current 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 previousMonths
[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 monthCombined 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 namePost 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 seasonThe 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.


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.



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%5DWP-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 testTheme 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
Editors, builders, themes, and related content
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
- Open Plugins → Add New Plugin in WordPress.
- Search for Dynamic Month & Year into Posts.
- Choose Install Now, then Activate.
- Type
yearin 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
seasonon legacy non-Composer installations. - Restored
ordinalandrankattributes forageon 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_filtersswitch 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
seasonshortcode with Northern and Southern Hemisphere support. - Added
ordinal="true"andrank="true"toage, 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
agewith 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
daysuntilanddayssince. - 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
ndandpd. - 1.3.7: Added
nmonthyearandpmonthyear. - 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
datemodifiedanddatepublished. - 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
monthyearafter the 28th. - 1.2.7: Fixed localized
monthyearoutput. - 1.2.6: Added Elementor and Elementor Pro widget support.
- 1.2.5: Added
weekdayandwd. - 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 fordate. - 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
pyearandnyear. - 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.