A customer drives over at half past six because your website footer says you close at seven. The shop shut at six. You changed the hours on the contact page last spring and forgot the footer, and the Google listing says something else again.
That small mismatch is the real problem behind most questions about how to add business hours to WordPress. Typing the hours in is not the hard part; keeping one correct version everywhere, through holidays and seasonal changes, is the part worth planning, and it starts with deciding where the hours should appear at all.
Where your opening hours should appear
| Place | What to show | Why |
|---|---|---|
| Contact page | The full weekly schedule, with any breaks | This is where people look first when planning a visit or a call |
| Footer | The full schedule, or a short summary such as “Mon–Sat, 10 am–7 pm” | It appears on every page, so visitors find it wherever they land |
| Header or top bar | Only if hours matter a lot, such as a clinic or a takeaway | Space there is precious; a phone number usually earns it more |
| Location pages | That branch’s own hours | Different branches often keep different times |
Do not put the hours in an image. Text can be read by screen readers, copied, and found by search engines; a picture of a timetable cannot, and it is harder to update. For the wider question of whether a feature needs a plugin at all, see our guide to adding features to a WordPress site the sensible way.
Pick one source of truth
The mistake in the opening example happened because the same hours were typed into three places. Whichever method you choose below, aim for the hours to live in one place in WordPress and be displayed from there. When the hours change, you edit once.
Outside WordPress, your Google Business Profile and any directory listings are separate copies. Keep a short note of every place your hours appear, so a change becomes a quick checklist rather than guesswork.
Three ways to add business hours to WordPress
1. A synced pattern (no plugin)
This is the simplest reliable method and works in any recent WordPress version.
- Open a page in the block editor and add a heading such as “Opening hours”.
- Below it, add a List block, or a Table block with two columns: day and hours.
- Select both blocks, group them, then use the options menu (the three dots) to create a pattern. Give it a clear name, such as “Opening hours”, and make sure it is set as synced.
- Insert that pattern wherever the hours should appear: the contact page, and the footer.
- Later, edit the pattern once, and every copy updates.
Synced patterns used to be called reusable blocks, and our post on block patterns and synced patterns explains them in more detail, including how to detach a copy if one location needs different text.
In a block theme, add the pattern to the footer through Appearance → Editor. In a classic theme, add it to a footer widget area under Appearance → Widgets, where synced patterns can be inserted like any other block. Where footer content lives in your particular theme is covered in our post on editing the footer in WordPress.
2. Your theme’s contact or footer options
Some themes have a top bar or footer area with fields for phone, email and hours, set in Appearance → Customize. This is fine if those are the only places the hours appear. If you also show hours on the contact page, you now have two copies to keep in step, so note both in your checklist.
3. An opening hours plugin
Several plugins in the directory are built just for opening hours. Typically they let you enter a weekly schedule once, add exceptions for holidays, and display the hours with a shortcode or block. Many can also show an “Open now” or “Closed” message.
That live status is the main reason to use one, and it comes with a catch. If the plugin works out “open or closed” on the server, and your site uses page caching, a visitor may be shown a cached page saying “Open now” hours after you closed. Check the plugin’s documentation for how it works with caching, or test it yourself: look at the page just after closing time in a private window. If the message is stale, either exclude that page from the cache or switch the live status off and show the plain schedule.
Formatting hours so nobody misreads them
- List every day. Show closed days as “Closed” rather than leaving them out. A missing Sunday makes people wonder.
- Group days only when it stays clear. “Monday to Friday” is easy to read; “Mon, Wed, Fri–Sat” is not.
- Show breaks. If you close for lunch, write two time ranges for that day.
- Choose one time style. Either “10 am–7 pm” or “10:00–19:00”, used consistently. Customers in some countries are more used to one than the other, so pick what yours use.
- Name the time zone if you serve customers abroad, especially for phone or chat support.
- Separate different services. If phone lines and the shop keep different hours, label them as two schedules.
Holidays and temporary changes
Holidays are where hours most often go wrong. For a one-off closure, a short line above the regular schedule works well: “Closed on [date] for [holiday]; normal hours resume on [date].” Add it to the synced pattern so it appears everywhere at once, and set a reminder to remove it the day after. An announcement bar is another good place for it.
Updating Google and your website together for festivals and seasons has its own post: holiday and seasonal hours on Google and your site.
Opening hours in structured data
Search engines can read your hours more reliably when they are also given as structured data, part of LocalBusiness markup. You do not need to write this code. SEO plugins handle it:
- Rank Math has a Local SEO module that, once switched on, includes fields for your business details and opening hours.
- Yoast SEO offers local business settings, including hours, through its Local SEO extension; check what your setup includes.
- Other local SEO and schema plugins offer similar fields.
This creates a second copy of your hours, inside the SEO plugin. Add it to your checklist and update it at the same time as the visible schedule; markup that disagrees with the page is worse than none. Our post on LocalBusiness schema for small businesses explains the rest of that markup, and the Schema Markup Validator at schema.org will show you what the page outputs. Structured data helps search engines understand the page; it does not decide how your business appears in search results.
Hours sit alongside your phone number, address and prices as details that quietly go out of date, and our WordPress site owner’s handbook suggests a routine for checking all of them.
Frequently asked questions
Should my website hours match my Google Business Profile exactly?
Yes. Customers see both, and a difference makes them unsure which to trust. If your profile shows special hours for a holiday, show the same change on your site. Keep a list of every place your hours appear, including directories and social profiles, and update them together whenever anything changes.
How do I show hours for a business that works by appointment only?
Say so plainly, then give the hours when appointments are available and how to book. For example, “By appointment, Monday to Saturday, 10 am to 6 pm. Call or use the booking form.” If you also take calls outside those times, list phone hours separately so customers know when someone will answer.
Can I show different hours for each branch on one site?
Yes. Give each branch its own location page with its own hours, rather than one long table on the contact page. Use a separate synced pattern for each branch so editing one never changes another. Local SEO plugins that support multiple locations can add structured data for each branch as well.
What hours should I show if my business works entirely online?
Show when someone will actually reply: the hours your phone, chat or email are staffed, with the time zone named. Customers abroad then know whether to expect an answer today. If you do not offer live contact at all, a short line saying how messages are handled is clearer than a timetable.
Once the hours live in one place and you have a list of the other copies, a change of hours becomes a five-minute job you can do yourself. Should the synced pattern, the footer or the SEO plugin’s fields refuse to show what you entered, ongoing WordPress support from our team can help untangle it.