Office-Only Time Clock on WordPress: Setup Guide

If you run an on-site team — a shop floor, a clinic front desk, a kitchen, a warehouse — you probably don’t want staff clocking in from the bus, from home, or through a coworker’s phone. You want the clock to work in one place: the office. And if you already run a WordPress site, you’d rather not pay a separate cloud service per head to get there.

This guide walks through setting up an office-only time clock on WordPress — on-premises clock-in that only accepts a punch from your own network. We’ll cover the prerequisites, the office-IP lock that does the actual enforcing, the kiosk option for a shared front-desk tablet, and what it costs (flat, not per seat).

The examples use Punchwell, a self-hosted WordPress time clock whose flagship feature is exactly this — a per-employee, hard-enforced office-IP lock. The setup concepts apply broadly, but the enforcement specifics below are Punchwell’s.

What “office-only” should actually mean

There’s an important distinction worth naming up front, because most time clocks blur it.

A lot of tools will record where a punch came from and then let it through anyway — you find out after the fact, in a report, that someone clocked in from across town. That’s logging, not enforcing. It catches honest mistakes but does nothing to stop deliberate time theft in the moment.

An office-only clock that actually holds the line does something different: it refuses the punch server-side when the device isn’t on your office network. The employee taps “clock in,” they’re not on an allowed address, and the punch is denied — not quietly flagged for later. That’s the behavior you’re really after, and it’s the behavior this guide sets up.

GPS geofencing is the common alternative, and it has a real weakness here: it needs an app, and a phone’s location can be spoofed from a couch. An office-IP lock can’t be faked from home — the device is either on your network or it isn’t. (More on combining the two later; GPS is a useful deterrent, but the IP lock is the hard control.)

Prerequisites: what you need before you start

Good news first — if you already operate a WordPress site, you have most of the moving parts already. There’s no separate server to stand up and no cloud account to create. Employees are just WordPress users, so there’s nothing new for your team to learn.

Here’s the short checklist:

  1. A WordPress site you control. Self-hosted, on your own hosting. (One note: this is a single-site tool — it isn’t designed for WordPress Multisite.)
  2. PHP 8 / WordPress 7 / MySQL 8 or compatible. Punchwell is clean on the current stack; the abandoned original plugin it forks from was written for PHP 5.6 and fatals on PHP 8.
  3. Your office’s public IP address. This is the address your office internet connection presents to the outside world — not a 192.168.x local address. You can find it by visiting any “what is my IP” page from a computer in the office. Punchwell also puts a one-click “Use this IP” helper on every IP-entry screen, so you usually don’t have to look it up by hand.
  4. A few minutes to do the standard clock-in setup, which Punchwell requires in this order: each person has an employee role → is assigned to a department → that department has a shift policy. Miss any one and the punch is refused by design — this is the single thing that trips up most new installs, so it’s worth getting right before you add the IP lock.

One caution if your office uses a residential or small-business internet plan: some ISPs hand out a dynamic public IP that changes occasionally. If yours does, you’ll either want a static IP from your provider, or you’ll allow a whole range of addresses rather than one (covered next).

Step 1 — Install and do the basic clock-in setup

Install Punchwell like any other plugin and activate it. Add your employees (or import them), create at least one department, and assign a shift policy to that department. At this point you have a working time clock — anyone with an employee role can punch in and out from anywhere. The next step is what makes it office-only.

Step 2 — Turn on the office-IP lock

This is the core of an office-only clock, so it’s worth understanding what each piece does.

The lock is per employee. On a person’s profile you flag them as “requires office IP,” and from then on they can only punch in or out from an address you’ve allowed. Stored on the user, enforced at punch time — Punchwell refuses the punch server-side when they’re off-network. Crucially, this is per-person: your on-site cashiers can be locked to the building while a remote bookkeeper clocks in from anywhere. (Some WordPress HR tools, like WP ERP, only offer a global IP whitelist — everyone or no one — which doesn’t fit a mixed team. That’s the documented difference as of June 2026; confirm current behavior with any vendor.)

You can express “the office” in a few ways, and you can mix them:

  • A single IP — one address, the simplest case.
  • A CIDR block — a whole range at once, written like 203.0.113.0/24. Useful when your office presents several addresses or you don’t want to list each one.
  • An address range — a start-to-end span.
  • IPv4 and IPv6 are both supported.

There are also three allowlist scopes, and they’re unioned — meaning each one only ever widens access, never narrows it:

  • Company-wide — addresses every locked employee can use.
  • Per-office — each office location can carry its own IPs (handy if you have two storefronts on different connections).
  • Per-employee — an “additional allowed IPs” field on the individual profile.

So a locked employee can punch from any address in the union of those lists. Adding an IP somewhere only ever loosens the rule, which keeps the behavior predictable as you grow.

A few enforcement options worth knowing:

  • Block / Warn / Flag modes. Block hard-refuses an off-site punch; Warn and Flag let it through but note it. (One honest caveat: in the current build, Warn and Flag behave identically — neither blocks — so think of it as “enforce” vs. “observe.”) For a true office-only clock, you want Block.
  • Blocked-attempt email. HR can get an email whenever an off-site punch is refused.
  • Lock-by-role and default-lock-new-employees, so new hires inherit the office-only rule automatically instead of you setting it one at a time.
  • A clock-in time window, if you only want to accept punches around shift start. (It’s direction-aware — it won’t block someone from clocking out late.)

For the full walkthrough, see the office-IP clock-in lock feature page.

Step 3 (optional) — Add a kiosk for the front desk

The IP lock answers where a punch is allowed. A kiosk answers how people punch when they share a device.

Instead of every employee logging into WordPress on a wall tablet, you enroll one device as a kiosk and staff clock in with a short code plus a 6-digit PIN — no individual logins on the shared screen. You drop the kiosk on a page with a shortcode ([hrm_kiosk]), and because the tablet sits in the building, the venue’s IP has to match your allowlist anyway. The two controls reinforce each other: the kiosk is the on-site punch surface, the IP lock makes sure that surface is actually on-site.

This is a clean setup for a reception desk, a kitchen pass, or a warehouse entrance. If some of your team is genuinely mobile, Punchwell also offers a GPS geofence and a mobile/PWA punch screen — you can read about both on the GPS geofence and kiosk page — but for a strict office-only clock, kiosk plus IP lock is the combination to reach for.

Step 4 — Verify it works

Before you trust it with payroll, test it the way an employee would:

  1. From inside the office, have a locked employee clock in. It should succeed.
  2. From off-network (tether a phone to mobile data, or step outside Wi-Fi), try again. In Block mode, the punch should be refused — not logged-and-allowed.
  3. Check that HR received the blocked-attempt email, if you enabled it.
  4. Confirm the person can still clock out normally (the time window won’t block clock-out).

If the in-office punch fails, re-check the prerequisite chain from Step 1 (role → department → shift policy) before assuming the IP lock is misconfigured — a missing shift policy refuses the punch for an entirely different reason.

What it costs

Here’s where a self-hosted, WordPress-native clock changes the math. Punchwell is priced per site, never per seat, with unlimited employees on every tier:

  • Free / Community on WordPress.org — base HR plus a basic single-office IP lock. A real on-ramp.
  • Pro — $99/year per site — the full depth: per-employee and per-office allowlists, CIDR and address ranges, block/warn/flag, plus GPS geofence, kiosk, mobile punch, payroll export, leave and PTO, and more.

Your renewal price is locked for as long as you don’t lapse, and you add your hundredth employee for $0 more.

For comparison — and these are approximate, as of June 2026; confirm current rates with each vendor — a 25-staff shop tends to pay roughly $1,520/yr for Buddy Punch, ~$1,950/yr for Deputy, or ~$2,100/yr for When I Work, because those bill per head. Buddy Punch is a capable product that does ship IP restriction and GPS, but your data lives in its cloud and the cost scales with your team. Most other SMB clocks — Deputy, When I Work, Homebase, Jibble, Connecteam — rely on GPS geofencing only, with no IP lock at all.

See the full breakdown on the pricing page.

A note on owning your data

One quiet advantage of doing this inside WordPress: your timesheets stay in your own database. There’s no cloud holding your roster, and Punchwell has no data call-home — the original’s call-home code was removed and verified, the free version makes no outbound calls at all, and Pro’s only outbound call is license validation, never your data. For clinics, dental practices, and agencies that can’t put staff data in someone else’s cloud, that’s often the deciding factor.

It’s also worth knowing the lineage: Punchwell is a maintained, security-hardened GPL fork of the abandoned “WP Human Resource Management” plugin, which was removed from WordPress.org in 2025 over a security issue and last shipped code around 2019. If you’re coming from that, your existing data carries over — it’s a migration, not a rebuild. Details are on the security page, and the migration guide shows how your records come with you.

Quick FAQ

Will an office-only clock stop buddy punching? With Block mode and the IP lock on, yes — a punch from outside your network is refused server-side, so an employee can’t clock in from home and a coworker can’t cover for a no-show from off-site. It’s enforcement, not a report after the fact.

What if my office IP changes? Some ISPs assign a dynamic public IP. Either request a static IP, or allow a CIDR block or address range that covers the addresses your connection uses, so a change within that range doesn’t lock anyone out.

Can some employees be office-only while others clock in from anywhere? Yes. The lock is per employee. Flag your on-site staff as office-only and leave remote workers unrestricted.

Do employees need to install an app? No. They punch through the browser on a WordPress page, or at a shared kiosk with a code and PIN. The optional mobile punch is a responsive web/PWA screen, not an App Store app.

Is GPS or IP the stronger control? The IP lock. GPS is useful as a deterrent for mobile teams, but phone location can be spoofed; being on your office network can’t be faked from home.


Ready to lock your clock to the office? Start free on WordPress.org, or read exactly how the office-IP lock works first. If you’re moving off the old WP Human Resource Management plugin, the migration guide shows how your data comes with you.


Punchwell is an independent, third-party maintained fork of the GPL-licensed “WP Human Resource Management” plugin. Sturdyhaus is not affiliated with, endorsed by, or sponsored by wpspear, weDevs, or the original author. Product and competitor names — including Buddy Punch, Deputy, When I Work, Homebase, Jibble, Connecteam, and WP ERP — are referenced descriptively only and belong to their respective owners. Competitor pricing is approximate as of June 2026; confirm current rates with each vendor.


Punchwell is an independently maintained GPL fork. Not affiliated with the original “WP Human Resource Management” plugin or its authors. Competitor names and figures are nominative and approximate (as of the date noted) — confirm current rates.