Open Hours icon

Open Hours

Business hours your customers can trust: a live "Open now" badge, a clean hours table, and Google-ready schema — all from one source of truth.

Free · GPLv2WordPress 6.2+PHP 7.4+v0.1.0

Last updated

Open Hours is a privacy-first WordPress plugin that keeps your business hours honest everywhere they appear: the hours table on your contact page, the live "Open now / Closes at 5:00 pm" badge, and the LocalBusiness structured data Google reads. You set the hours once; every surface renders from that single source of truth.

The badge is computed in the visitor's browser — about 2KB of dependency-free JavaScript — so full-page caching can never show a stale open/closed state, and daylight saving is handled by your site's own timezone. Real-world schedules are first-class in the free plugin: split shifts, closed days, and hours that run past midnight for bars and late-night takeaways.

The free plugin is complete on its own; the optional Pro add-on adds the special-hours calendar for holidays, multiple locations, a countdown, and an automatic "we're closed" banner — and lives entirely off WordPress.org.

Why Open Hours

  • One source of truth for your hours

    Set your hours once and everything stays in sync — the table your visitors read, the "Open now" badge, and the structured data Google reads. No more editing a text widget in three places and forgetting one.

  • A badge that never lies to a cached page

    Most "open now" plugins render the status on the server, so a page cached at 10 am still says "Open" at midnight. Open Hours computes the badge in the visitor's browser from your hours and your site's timezone — about 2KB of dependency-free JavaScript, correct on any cache, DST included.

  • Google reads the same hours your customers do

    The plugin emits LocalBusiness JSON-LD with openingHoursSpecification generated from the exact hours on the page. Pick your business type from a curated list, or switch the schema off if your SEO plugin already outputs it.

  • Real-world hours, not just 9-to-5

    Split shifts for the lunch break, closed days, and hours that run past midnight for bars and takeaways — all first-class, in the free plugin, in the display and in the schema.

  • Holidays handled everywhere at once (Pro)

    Mark December 25th closed once in the special-hours calendar and the table, the badge, the countdown, and the schema all update together. No more customers standing outside a dark shop because your website said you were open.

  • Every location, its own hours (Pro)

    Run more than one branch? Pro renders each location with its own hours, badge, and schema — and your theme can style each block independently.

Screenshots

The Open Hours front-end display — a weekly hours table with a green "Open now · Closes at 5:00 pm" badge above it.The Open Hours admin editor — per-day rows with add/remove interval buttons, business details, and the schema toggle.

Free vs Pro

Free

GPLv2
  • Weekly hours with split shifts (9–12 / 1–5) and past-midnight hours (18:00–02:00)
  • Live "Open now / Closes at 5:00 pm" badge that stays correct on cached pages
  • Hours table via a Gutenberg block or the [open_hours] shortcode
  • LocalBusiness structured data (openingHoursSpecification) from the same hours you display
  • Curated business types — Restaurant, Store, MedicalBusiness, HairSalon, and more
  • 12-hour, 24-hour, or site-default time formats
  • No account, no license key, no external requests of any kind
Pro

Pro

$29.99
per year
Unlimited sites

Everything in Free, plus:

  • Special-hours calendar — holidays, one-off closures, and half days that override the weekly schedule everywhere at once
  • Multiple locations, each with its own hours, badge, and schema
  • Countdown — "opens in 40 minutes" / "closes in 1 hour"
  • Site-wide "we're closed" banner that appears automatically outside business hours
Pro coming soon

How Open Hours compares

Yoast Local SEO

Them: Outputs opening-hours schema for Google as part of a $79/yr SEO suite — but nothing your visitors can see: no hours table, no open-now badge.

Ours: Schema and the visible display come from the same source, free. The Pro add-on ($29.99/yr) adds the holiday calendar and multi-location, not the basics.

We're Open!

Them: A simple open/closed widget, but the status is rendered server-side — page caching shows stale open/closed states — and there's no structured data for search.

Ours: The badge computes client-side so caching can't make it lie, and LocalBusiness schema ships free — generated from the exact hours on the page.

FAQ

Does it send my data anywhere?
No. Your hours live in a single option in your own database. The free build makes no outbound HTTP requests of any kind — no fonts, no APIs, no phoning home.
Will the "Open now" badge be wrong on cached pages?
No — that's the core design decision. The hours table and schema are rendered on the server, but the open/closed state is computed in the visitor's browser from your hours and your site's timezone, so full-page caching never shows a stale badge.
Can I set hours past midnight?
Yes. A closing time earlier than the opening time (say 18:00–02:00) is treated as running past midnight — in the display, in the badge, and in the schema.
What if my SEO plugin already outputs LocalBusiness schema?
Turn ours off with one toggle in the settings. Everything else keeps working — you just avoid duplicate structured data.
Does the badge need JavaScript?
Yes — about 2KB of dependency-free JavaScript, loaded only on pages that show your hours. Without JavaScript the badge simply doesn't render; the hours table is always visible.
What's the difference between free and Pro?
Free is complete for a single location with a regular weekly schedule — hours, split shifts, past-midnight, badge, block, shortcode, and schema. Pro adds the special-hours calendar (holidays and one-off closures), multiple locations, the countdown, and the automatic closed banner. Pro is a separate add-on hosted on haychdev.com — none of it is bundled into the free WordPress.org build.
Which timezone does it use?
Your site's timezone, always — including daylight-saving changes. There's nothing separate to configure or forget.