{"id":357254,"date":"2026-08-25T16:23:48","date_gmt":"2026-08-25T16:23:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/dialperpage\/"},"modified":"2026-08-25T16:23:34","modified_gmt":"2026-08-25T16:23:34","slug":"dialperpage","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/dialperpage\/","author":23553183,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.1","stable_tag":"1.1.1","tested":"7.1","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"DialPerPage","header_author":"DialPerPage Contributors","header_description":"Assign replacement phone numbers to specific pages without editing themes or content.","assets_banners_color":"ccd6e6","last_updated":"2026-08-25 16:23:34","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":31,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.1":{"tag":"1.1.1","author":"codeverse","date":"2026-08-25 16:23:34"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3665679,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3665679,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3665679,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3665679,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[15553,154681,1600,2644,15059],"plugin_category":[],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-357254","plugin","type-plugin","status-publish","hentry","plugin_tags-call-tracking","plugin_tags-dynamic-number-insertion","plugin_tags-landing-pages","plugin_tags-phone","plugin_tags-telephone","plugin_committers-codeverse"],"banners":{"banner":"https:\/\/ps.w.org\/dialperpage\/assets\/banner-772x250.png?rev=3665679","banner_2x":"https:\/\/ps.w.org\/dialperpage\/assets\/banner-1544x500.png?rev=3665679","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/dialperpage\/assets\/icon-128x128.png?rev=3665679","icon_2x":"https:\/\/ps.w.org\/dialperpage\/assets\/icon-256x256.png?rev=3665679","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>DialPerPage replaces one configured source phone number with page-specific numbers on exact WordPress URLs.<\/p>\n\n<p>Replacement runs on the final HTML response, so the plugin can update shared headers and footers, page-builder output, modal windows, visible text, <code>tel:<\/code> links, WhatsApp links, and phones whose characters are split across nested HTML elements.<\/p>\n\n<p>Only the configured source number is changed. Other numbers and pages remain untouched.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Assign a different replacement number to each page.<\/li>\n<li>Accept full URLs or relative paths.<\/li>\n<li>Update visible numbers, <code>tel:<\/code> links, and phone-based messenger URLs.<\/li>\n<li>Preserve the original phone mask, including spaces, non-breaking spaces, parentheses, dots, and hyphens.<\/li>\n<li>Handle phone digits split across nested <code>span<\/code> or <code>small<\/code> elements.<\/li>\n<li>Search, validate, add, and remove rules from a responsive settings screen.<\/li>\n<li>Support international phone numbers containing 10 to 15 digits.<\/li>\n<li>Follow the standard WordPress locale and WordPress.org language-pack system.<\/li>\n<li>Make no changes to post content, theme files, or templates.<\/li>\n<li>Purge supported page caches after activation, upgrades, and settings changes.<\/li>\n<li>Restore managed phone links if a call-tracking script changes them in the browser.<\/li>\n<li>Send no data to external services and include no tracking.<\/li>\n<\/ul>\n\n<h4>Performance<\/h4>\n\n<p>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.<\/p>\n\n<p>Admin CSS and JavaScript load only on the plugin settings screen. Settings and the active rule are cached for the current request.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>DialPerPage does not collect, transmit, or share personal data. It makes no external requests and stores only its configuration in the WordPress options table.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In WordPress, open Plugins &gt; Add New Plugin &gt; Upload Plugin.<\/li>\n<li>Upload <code>dialperpage.zip<\/code>, install it, and activate DialPerPage.<\/li>\n<li>Open Settings &gt; DialPerPage.<\/li>\n<li>Enter the source phone currently displayed on the site.<\/li>\n<li>Add a page URL or path and its replacement phone.<\/li>\n<li>Save the settings. DialPerPage clears supported WordPress page caches automatically; clear any hosting or CDN cache that is managed outside WordPress.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20modify%20content%20in%20the%20database%3F\"><h3>Does the plugin modify content in the database?<\/h3><\/dt>\n<dd><p>No. Replacement is applied to the final HTML response. Posts, page-builder data, theme files, and templates are not changed.<\/p><\/dd>\n<dt id=\"does%20it%20run%20on%20pages%20without%20a%20rule%3F\"><h3>Does it run on pages without a rule?<\/h3><\/dt>\n<dd><p>The plugin performs one exact path lookup. When no rule matches, output buffering does not start and the HTML is not scanned or copied.<\/p><\/dd>\n<dt id=\"will%20unrelated%20phone%20numbers%20be%20replaced%3F\"><h3>Will unrelated phone numbers be replaced?<\/h3><\/dt>\n<dd><p>No. Only the configured source phone is matched. For 11-digit Russian phones, <code>7<\/code> and <code>8<\/code> prefixes are treated as equivalent.<\/p><\/dd>\n<dt id=\"is%20the%20original%20phone%20format%20preserved%3F\"><h3>Is the original phone format preserved?<\/h3><\/dt>\n<dd><p>Yes, when source and replacement numbers contain the same number of digits. Only digits change; separators and HTML spacing entities remain in place. Compact <code>tel:<\/code> values remain compact.<\/p><\/dd>\n<dt id=\"does%20it%20support%20phones%20split%20into%20many%20html%20tags%3F\"><h3>Does it support phones split into many HTML tags?<\/h3><\/dt>\n<dd><p>Yes. Inside a matching <code>tel:<\/code> link, the plugin can replace digits distributed across nested <code>span<\/code> and <code>small<\/code> elements while retaining their tags, styles, classes, and microdata.<\/p><\/dd>\n<dt id=\"can%20i%20use%20a%20full%20url%3F\"><h3>Can I use a full URL?<\/h3><\/dt>\n<dd><p>Yes. Both <code>https:\/\/example.com\/service\/<\/code> and <code>\/service\/<\/code> are accepted. Query parameters are ignored, and matching uses the normalized path.<\/p><\/dd>\n<dt id=\"why%20is%20the%20old%20phone%20still%20visible%3F\"><h3>Why is the old phone still visible?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"what%20if%20a%20call-tracking%20script%20changes%20the%20number%20after%20the%20page%20loads%3F\"><h3>What if a call-tracking script changes the number after the page loads?<\/h3><\/dt>\n<dd><p>On pages with an active rule, DialPerPage marks managed <code>tel:<\/code> 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.<\/p><\/dd>\n<dt id=\"how%20are%20translations%20handled%3F\"><h3>How are translations handled?<\/h3><\/dt>\n<dd><p>DialPerPage follows the current WordPress locale. Community translations are managed and delivered through the standard WordPress.org language-pack system.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Moved plugin translations to the standard WordPress.org language-pack system.<\/li>\n<li>Removed the plugin-specific language selector so the interface follows the WordPress locale.<\/li>\n<\/ul>\n\n<h4>1.1<\/h4>\n\n<ul>\n<li>Added automatic cache purging after activation, upgrades, and settings changes.<\/li>\n<li>Added an active-page-only browser guard for phone links changed by third-party scripts.<\/li>\n<li>Ensured page caches receive the already-replaced HTML response.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<\/ul>","raw_excerpt":"Assign replacement phone numbers to specific pages without editing themes, templates, or content.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=357254"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/codeverse"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357254"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357254"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357254"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357254"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357254"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}