=== Display During Conditional Shortcode === Contributors: gserafini Plugin URI: https://sharethepractice.org/plugins/display-during-conditional-shortcode/ Donate link: https://sharethepractice.org/plugins/display-during-conditional-shortcode/ Tags: schedule, conditional, display, shortcode, block Requires at least: 6.1 Tested up to: 6.9 Stable tag: 2.0 Requires PHP: 7.0 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html Show or hide content based on date ranges, recurring day/time schedules, or custom strtotime expressions. Includes a Gutenberg block and shortcode. == Description == Display content conditionally based on a schedule. Choose from three scheduling modes: 1. **Date Range** - Show content between specific start and end dates 2. **Recurring** - Show content on specific days of the week during a time window 3. **Custom** - Use PHP strtotime expressions for flexible scheduling = Gutenberg Block = The **Display During** block provides a visual editor with: * Sidebar controls for all three scheduling modes * Date/time pickers for start and end dates * Day-of-week checkboxes for recurring schedules * Live status indicator (active/inactive) * Optional fallback message when content is hidden * Copy as Shortcode toolbar button = Shortcodes = The `[display_during]` shortcode works in the Classic Editor and anywhere shortcodes are supported. **Date range:** `[display_during start_day_time="June 1, 2026 8:00 am" end_day_time="December 31, 2026 11:59 pm"]Content here[/display_during]` **Recurring schedule (new in 2.0):** `[display_during days="mon,wed,fri" start_time="09:00" end_time="17:00"]Office hours content[/display_during]` **Custom strtotime:** `[display_during start_day_time="Sun 8:00 am" end_day_time="Mon 8:00 pm"]Weekend content[/display_during]` **With fallback message:** `[display_during end_day_time="June 1, 2026"]Register now![display_during_message]Registration has closed.[/display_during_message][/display_during]` = Shortcode Parameters = * `start_day_time` - When to start showing content (strtotime string or date) * `end_day_time` - When to stop showing content * `days` - Comma-separated days for recurring mode (mon,tue,wed,thu,fri,sat,sun) * `start_time` - Start time for recurring mode (HH:MM format) * `end_time` - End time for recurring mode (HH:MM format) * `timezone_location` - PHP timezone identifier (defaults to site timezone) * `message` - Plain text fallback message (legacy; use nested shortcode for rich content) == Installation == = Install via Plugins > Install New = 1. Search for "Display During Conditional Shortcode" 2. Click the "Install Now" link 3. Click "Activate Plugin" = Via ZIP / FTP = 1. Unzip the ZIP file and drop the folder straight into your wp-content/plugins directory. 2. Activate the plugin through the 'Plugins' menu in WordPress. = Using the Block Editor = 1. Add a new block and search for "Display During" 2. Configure the schedule in the sidebar 3. Add content to the Content zone 4. Optionally enable and add a fallback message = Using the Shortcode = 1. Insert `[display_during end_day_time="June 27, 2026 10:00 am"]Your content[/display_during]` 2. Publish and view the post or page == Frequently Asked Questions == = How do I show content on a recurring schedule? = Use the Recurring mode in the block sidebar, or the shortcode `days` parameter: `[display_during days="mon,wed,fri" start_time="09:00" end_time="17:00"]Weekday content[/display_during]` = What are valid time settings for start_day_time and end_day_time? = The plugin uses PHP's [strtotime()](http://php.net/manual/en/function.strtotime.php) function. You can specify a specific date (e.g. "June 27, 2026 10:00 am") or a relative expression (e.g. "Sun 8:00 am", "Today 9am"). Either `start_day_time` or `end_day_time` (or both) must be provided. If `start_day_time` is omitted, "now" is used. If `end_day_time` is omitted, content is shown permanently after the start time. = Can I show content only after a certain date? = Yes! Use `start_day_time` without `end_day_time`: `[display_during start_day_time="June 1, 2026 8:00 am" message="Coming soon!"]Content[/display_during]` = Can I show rich fallback content instead of plain text? = Yes! Use the nested `[display_during_message]` shortcode: `[display_during end_day_time="June 1, 2026"]Main content[display_during_message]Sorry, this is no longer available.[/display_during_message][/display_during]` In the block editor, check "Show optional message when not displayed" to reveal the message zone. = Does the block work with the Classic Editor? = Yes. The block saves a real shortcode in the post content, so it round-trips cleanly between the Block Editor and Classic Editor. = Can I convert existing shortcodes to blocks? = Yes. The plugin includes a shortcode-to-block transform. Existing `[display_during]` shortcodes can be converted using the "Convert to Blocks" feature. = Is support available? = Yes, use the contact form on the ShareThePractice.org [website](http://sharethepractice.org/contact/). == Screenshots == 1. Block Editor - Display During block with schedule sidebar 2. Block Editor - Recurring schedule with day checkboxes 3. Content shown during valid dates 4. Fallback message shown when schedule is not active == Changelog == = 2.0 = * New: Gutenberg block with visual schedule controls (Dates, Recurring, Custom modes) * New: Recurring schedule mode - show content on specific days of the week during a time window * New: Nested [display_during_message] shortcode for rich fallback content (HTML, shortcodes, media) * New: Shortcode-to-block transform for converting existing shortcodes * New: Copy as Shortcode toolbar button in block editor * New: Live schedule status indicator in editor (active/inactive/unknown) * New: Shared schedule evaluation engine used by both block and shortcode * New: Full i18n support with .pot file for translations * Improvement: Refactored shortcode handler to use shared evaluator * Improvement: All date comparisons use integer timestamps (fixes microsecond comparison bug) * Requires WordPress 6.1+ (for block editor support) = 1.4 = * Feature: Support start_day_time without end_day_time to show content permanently after a date * end_day_time is no longer required when start_day_time is provided = 1.3 = * Security: Sanitize all shortcode attributes with sanitize_text_field() and wp_kses_post() * Security: Validate timezone against timezone_identifiers_list() before use * Improvement: Rewrite date handling using DateTime/DateTimeZone objects instead of date_default_timezone_set() * Improvement: Add try/catch for invalid date/time strings in shortcode attributes * Coding standards: Full PHPCS WordPress-Extra compliance = 1.2 = * Bug fix to reset timezone back to whatever it was before the shortcode runs = 1.1 = * Public release of plugin to WordPress repository = 1.0 = * Initial version of plugin, internal release only == Upgrade Notice == = 2.0 = New Gutenberg block with visual schedule controls, recurring day/time scheduling, and rich fallback messages. Shortcodes convert to blocks automatically. 100% backward compatible. Requires WordPress 6.1+. = 1.4 = Adds support for start-only dates (show content permanently after a date).