Skip to content

Special Hours Field

Regular work hours repeat every week. Real businesses don't. The Special Hours (VT) field lets each listing override its hours for specific dates — closed on Christmas Day, open late for an event, a half day before a holiday — and when that date arrives it replaces the normal hours everywhere they appear.

Add it alongside Work Hours

Special Hours doesn't replace Voxel's Work Hours field, it overrides it. Add both to the post type: Work Hours for the weekly schedule, Special Hours for the exceptions.

Setup

Step 1: Enable the field

  1. Go to Voxel Toolkit → Post Fields
  2. Find Special Hours (VT) and toggle it on
  3. Select Save Changes

Step 2: Add it to a post type

  1. Go to Voxel → Post Types → (your type) → Fields
  2. Add the Special Hours (VT) field
  3. Give it any label and key you like — nothing else references the key

That's the whole setup. The Work Hours widget and every work-hours dynamic tag pick it up automatically.

Adding a special date

Each entry in the field is one date:

SettingDescription
DateThe calendar date this applies to
LabelOptional name shown to visitors, e.g. "Christmas Day"
AvailabilityClosed all day, Open all day, Appointments only, or Enter hours
Repeats every yearApply this date every year, or only the year entered
HoursOne or more open/close times, when Availability is set to Enter hours

The availability options are deliberately the same four Voxel's Work Hours field uses, so a special date renders exactly like a normal day.

Repeating dates

Fixed holidays that land on the same date each year — Christmas Day, New Year's Day — should have Repeats every year switched on. Enter it once and it applies every year.

Moving holidays, or a one-off closure, should have it switched off, so the override applies only to the year entered.

A specific year always wins

If a date has both a recurring entry and an entry for that exact year, the exact date is used. So you can keep "Closed on 25 December, every year" and still override 2027 alone by adding a second entry for 2027-12-25.

What changes when a special date is today

The special date takes the place of that weekday everywhere:

  • The Work Hours (VX) widget's today row and its weekly list
  • The Open / Closed status badge
  • @post(work_hours.status) and @post(work_hours.status_label)
  • @post(work_hours.today) and the individual weekday tags

No template changes, no second widget, nothing to re-point. Anything already reading work hours reads the special hours instead for that day.

Telling visitors the hours are unusual

When a special date applies, the Work Hours widget shows a notice above the hours. Configure it under Work Hours (VX) → Content → Special hours (VT):

SettingDescription
Show special hours noticeTurn the notice on or off
Notice textWording shown, default "Special hours". Leave empty to show only the date's label
Show the date's labelInclude the label entered on the special date
Show iconShow a calendar icon before the text

Styling lives under Style → Special hours (VT): background, text colour, typography, border, radius, padding, spacing and icon size/colour.

Dynamic tags

Two tags are added to the work-hours group so a template can call the day out by name:

TagReturns
@post(work_hours.special_today)1 when a special date overrides today, empty otherwise
@post(work_hours.special_label)The label given to today's special date

Use special_today in a Voxel visibility condition to show a banner only on special days.

Timezones

"Is today the 25th?" is answered in the listing's own timezone, taken from the post's Timezone field where one exists, and the site timezone otherwise. A business in Auckland switches to its holiday hours at its own midnight, not the site's — which matters on any directory with listings in more than one region.

Search behaviour

Special hours change display, not search

On a holiday a listing reads "Closed" on its page and in every dynamic tag, but it can still match the Open now search filter that day.

Voxel's work-hours search index stores a repeating weekly pattern with no date dimension, so a specific calendar date can't be expressed in it. Filtering and sorting continue to use the regular weekly hours.

Notes

  • A listing with no special dates behaves exactly as before.
  • Entries with an invalid date, or set to "Enter hours" with no times, are discarded on save.
  • Disabling the field or the plugin reverts everything to regular work hours; nothing is lost.
  • A special date set on a listing with no regular Work Hours still displays — the remaining days read "Not available".

Built by Code Wattz.