LH Phone Numbers keeps every phone number on a WordPress network in one place. Each number is stored once, in international E.164 form, and linked to the people who use it. A person can have as many numbers as they need, one of which is their primary, and a shared number such as a family landline is stored once and linked to everyone who uses it.
Facts about a number belong to the number. If someone texts STOP, that opt-out holds for everyone sharing the number, so nobody on it is texted again by mistake. Facts about one person’s use of a number, such as whether it is their home or work number, whether it is their primary and whether they have verified it, belong to the link between them.
Features
- Numbers in any common format are checked and stored as E.164 using Google’s libphonenumber, with numbers that have no country code read as Australian by default (filterable).
- Each number’s line type (mobile, landline, VoIP and so on) is detected when it is first stored.
- Channels per number (SMS, WhatsApp, iMessage, Signal), each with its own opt-out and last delivery times. Mobile numbers get SMS automatically.
- Links carry a context (home, work or other), a primary flag, a verified time and where the link came from.
- Owners are polymorphic (an object type plus an ID). Only users are enabled for now; other types can be added with a filter.
- A PHP API for other plugins to look numbers up, link them and record channel results, plus read-only MCP abilities.
Setup
Network-activate the plugin. Its tables are created on activation, network-wide. It needs WordPress 6.9 and PHP 8.1, and its bundled Composer dependencies installed in vendor/.
When LH Profile Page is active, its primary and secondary phone fields are copied in automatically, both for existing users (in the background, in batches) and whenever either field changes.

