Troubleshooting

  • JNext lesson
  • KPrevious lesson
  • FSearch lessons
  • EscClear search

Shortcodes showing as plain text in titles

Cause: The dmyip_core_filters filter may be disabling title processing, or another plugin/theme is interfering.

Fix: Check your theme’s functions.php for any filters modifying dmyip_core_filters. The default behavior enables shortcodes in titles. You can verify by adding this temporarily:

add_filter( 'dmyip_core_filters', function ( $filters ) {
    error_log( 'dmyip_core_filters: ' . print_r( $filters, true ) );
    return $filters;
} );

Shortcodes not working in Elementor

Cause: Elementor integration loads automatically when Elementor is active.

Fix:

  1. Verify the plugin is active
  2. Clear Elementor’s cache (Elementor > Tools > Regenerate CSS & Data)
  3. Check if another plugin is unhooking the elementor/widget/render_content filter

Age shows “0”

Cause: Invalid date format or date in the future.

Fix: Use ISO 8601 format (YYYY-MM-DD):

[age date="1990-05-15"]    ✓ Correct
[age date="05/15/1990"]    ✗ May not parse correctly
[age date="May 15, 1990"]  ✗ Use ISO format
[age date="2090-01-01"]    → Returns 0 (future date)

[year] with offset shows wrong value

Cause: Versions before 1.7.1 used strtotime() for year offset calculation, which failed with large offsets.

Fix: Update to v1.7.1+. The shortcode now uses pure integer arithmetic:

[year n=-2003] → 23  (was broken in older versions)
[year n=100]   → 2126

Shortcodes in REST API responses show raw text

Cause: Post content returned by the WordPress REST API runs through the_content, which processes shortcodes. If you see raw shortcodes, the plugin may not be active.

Fix:

  1. Verify the plugin is active
  2. For titles: the plugin hooks into the_title, which the REST API also uses
  3. For custom endpoints: wrap content with do_shortcode() in your code

Countdown shows “0” instead of negative number

Expected behavior. [daysuntil] returns 0 when the target date has passed (never negative). Use [dayssince] for past dates:

[daysuntil date="2020-01-01"]  → 0 (past date, clamped to 0)
[dayssince date="2020-01-01"]  → 2240

REST API / WP-CLI commands not available

Cause: These features require the modern loading path (vendor/autoload.php).

Fix: Ensure the plugin was installed with the vendor/ directory included. If installed from the WordPress.org ZIP or GitHub release, vendor is included. If cloned from git, run:

composer install --no-dev --optimize-autoloader

Shortcodes stripped from excerpts

Cause: WordPress’s strip_shortcodes() function removes shortcodes from auto-generated excerpts.

Fix: The plugin already hooks into strip_shortcodes_tagnames to protect its shortcodes. If this isn’t working:

  1. Verify no other plugin is overriding strip_shortcodes_tagnames
  2. Check that the_excerpt filter is enabled in dmyip_core_filters

Season shows wrong value

Cause: Seasons are based on calendar months, not astronomical dates (equinoxes/solstices).

Northern hemisphere:

  • Spring: March – May
  • Summer: June – August
  • Autumn: September – November
  • Winter: December – February

Southern hemisphere: Use [season region="south"] for reversed seasons.


Performance concerns

The plugin has minimal performance impact:

  • Zero database queries for shortcode rendering
  • All output generated using PHP native date functions (date_i18n(), gmdate(), strtotime())
  • Only asset loaded: small CSS file in Block Editor for shortcode highlighting
  • No JavaScript on the frontend (except the Countdown block’s Interactivity API module)
  • No settings page, no options table entries, no admin AJAX calls

Block Bindings not working

Requirements:

  • WordPress 6.5 or later
  • Modern loading path active (vendor/autoload.php must exist)

Fix: Verify your WordPress version with wp core version. Block Bindings API was introduced in WP 6.5.


Conflicts with caching plugins

Shortcodes render server-side at page generation time. If a caching plugin serves a stale page, the dates won’t update until the cache is cleared.

Fix:

  • Configure cache expiration to clear daily (or at your desired freshness interval)
  • For the Live Countdown block, this isn’t an issue – it updates client-side via the Interactivity API
  • For pages with [daysuntil] or time-sensitive content, consider shorter cache TTLs