Title: DialPerPage
Author: codeverse
Published: <strong>August 25, 2026</strong>
Last modified: August 25, 2026

---

Search plugins

![](https://ps.w.org/dialperpage/assets/banner-772x250.png?rev=3665679)

![](https://ps.w.org/dialperpage/assets/icon-256x256.png?rev=3665679)

# DialPerPage

 By [codeverse](https://profiles.wordpress.org/codeverse/)

[Download](https://downloads.wordpress.org/plugin/dialperpage.1.1.1.zip)

 * [Details](https://wordpress.org/plugins/dialperpage/#description)
 * [Reviews](https://wordpress.org/plugins/dialperpage/#reviews)
 *  [Installation](https://wordpress.org/plugins/dialperpage/#installation)
 * [Development](https://wordpress.org/plugins/dialperpage/#developers)

 [Support](https://wordpress.org/support/plugin/dialperpage/)

## Description

DialPerPage replaces one configured source phone number with page-specific numbers
on exact WordPress URLs.

Replacement runs on the final HTML response, so the plugin can update shared headers
and footers, page-builder output, modal windows, visible text, `tel:` links, WhatsApp
links, and phones whose characters are split across nested HTML elements.

Only the configured source number is changed. Other numbers and pages remain untouched.

#### Features

 * Assign a different replacement number to each page.
 * Accept full URLs or relative paths.
 * Update visible numbers, `tel:` links, and phone-based messenger URLs.
 * Preserve the original phone mask, including spaces, non-breaking spaces, parentheses,
   dots, and hyphens.
 * Handle phone digits split across nested `span` or `small` elements.
 * Search, validate, add, and remove rules from a responsive settings screen.
 * Support international phone numbers containing 10 to 15 digits.
 * Follow the standard WordPress locale and WordPress.org language-pack system.
 * Make no changes to post content, theme files, or templates.
 * Purge supported page caches after activation, upgrades, and settings changes.
 * Restore managed phone links if a call-tracking script changes them in the browser.
 * Send no data to external services and include no tracking.

#### Performance

The plugin resolves the current request path with an exact array lookup. Output 
buffering, HTML processing, and the small browser guard start only when that path
has a valid replacement rule. AJAX, REST, JSON, feeds, cron, WP-CLI, XML-RPC, robots,
favicon, HEAD, and non-HTML responses are skipped.

Admin CSS and JavaScript load only on the plugin settings screen. Settings and the
active rule are cached for the current request.

### Privacy

DialPerPage does not collect, transmit, or share personal data. It makes no external
requests and stores only its configuration in the WordPress options table.

## Installation

 1. In WordPress, open Plugins > Add New Plugin > Upload Plugin.
 2. Upload `dialperpage.zip`, install it, and activate DialPerPage.
 3. Open Settings > DialPerPage.
 4. Enter the source phone currently displayed on the site.
 5. Add a page URL or path and its replacement phone.
 6. Save the settings. DialPerPage clears supported WordPress page caches automatically;
    clear any hosting or CDN cache that is managed outside WordPress.

## FAQ

### Does the plugin modify content in the database?

No. Replacement is applied to the final HTML response. Posts, page-builder data,
theme files, and templates are not changed.

### Does it run on pages without a rule?

The plugin performs one exact path lookup. When no rule matches, output buffering
does not start and the HTML is not scanned or copied.

### Will unrelated phone numbers be replaced?

No. Only the configured source phone is matched. For 11-digit Russian phones, `7`
and `8` prefixes are treated as equivalent.

### Is the original phone format preserved?

Yes, when source and replacement numbers contain the same number of digits. Only
digits change; separators and HTML spacing entities remain in place. Compact `tel:`
values remain compact.

### Does it support phones split into many HTML tags?

Yes. Inside a matching `tel:` link, the plugin can replace digits distributed across
nested `span` and `small` elements while retaining their tags, styles, classes, 
and microdata.

### Can I use a full URL?

Yes. Both `https://example.com/service/` and `/service/` are accepted. Query parameters
are ignored, and matching uses the normalized path.

### Why is the old phone still visible?

Saving settings automatically purges Hyper Cache, WP Super Cache, WP Rocket, W3 
Total Cache, Cache Enabler, and LiteSpeed Cache when their public purge APIs are
available. After updating from an earlier DialPerPage release, clear any remaining
hosting or CDN cache once. Then test the page in a private browser window and confirm
that the saved path exactly matches the page path.

### What if a call-tracking script changes the number after the page loads?

On pages with an active rule, DialPerPage marks managed `tel:` links and loads a
lightweight browser guard in the document head. If a third-party script such as 
a dynamic call-tracking service changes a marked link later, the guard restores 
its configured number before interaction. Unmanaged links and pages without rules
are not observed.

### How are translations handled?

DialPerPage follows the current WordPress locale. Community translations are managed
and delivered through the standard WordPress.org language-pack system.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“DialPerPage” is open source software. The following people have contributed to 
this plugin.

Contributors

 *   [ codeverse ](https://profiles.wordpress.org/codeverse/)

[Translate “DialPerPage” into your language.](https://translate.wordpress.org/projects/wp-plugins/dialperpage)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/dialperpage/), check
out the [SVN repository](https://plugins.svn.wordpress.org/dialperpage/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/dialperpage/) by
[RSS](https://plugins.trac.wordpress.org/log/dialperpage/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.1.1

 * Moved plugin translations to the standard WordPress.org language-pack system.
 * Removed the plugin-specific language selector so the interface follows the WordPress
   locale.

#### 1.1

 * Added automatic cache purging after activation, upgrades, and settings changes.
 * Added an active-page-only browser guard for phone links changed by third-party
   scripts.
 * Ensured page caches receive the already-replaced HTML response.

#### 1.0

 * Initial public release.

## Meta

 *  Version **1.1.1**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 8.0 or higher **
 * Tags
 * [call tracking](https://wordpress.org/plugins/tags/call-tracking/)[dynamic number insertion](https://wordpress.org/plugins/tags/dynamic-number-insertion/)
   [landing pages](https://wordpress.org/plugins/tags/landing-pages/)[phone](https://wordpress.org/plugins/tags/phone/)
   [telephone](https://wordpress.org/plugins/tags/telephone/)
 *  [Advanced View](https://wordpress.org/plugins/dialperpage/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/dialperpage/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/dialperpage/reviews/)

## Contributors

 *   [ codeverse ](https://profiles.wordpress.org/codeverse/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/dialperpage/)