🤔 Why WordPress Needs a Different Setup
A normal white page is a folder of static HTML files. You upload it, point your flow's white page setting to it, and you're done — the cloaking engine serves it directly with no extra steps. WordPress is not a folder of static files. It is a PHP application with its own front-controller (index.php) and its own routing rules baked into .htaccess. Every single URL on a WordPress site — the homepage, blog posts, category pages, even images and feeds in some setups — passes through that one index.php file before WordPress decides what to actually render.
This creates a direct conflict: your downloaded cloaking index.php also wants to be the front controller of the domain. Two front controllers cannot both occupy index.php at the same time. If you don't understand this conflict and just overwrite WordPress's file, you will get a broken site, missing click logs, or duplicate entries. This guide explains exactly how to set it up so WordPress works as a real, fully-clickable white page with zero side effects.
❌ The Wrong Way (and Why It Fails)
The instinct most people have is: "I'll rename WordPress's index.php to something else, drop the cloak's index.php in its place, and set the white page to redirect to the renamed file." This half-works and creates two separate problems depending on how you wire it up:
- Redirect-based linking: If your white page setting redirects the browser to the renamed WordPress entry file (e.g.
https://yourdomain.com/site.php), the visitor's address bar changes to that URL. From that point on, every link the visitor clicks inside WordPress is served directly by WordPress — completely bypassing your cloak. You lose the ability to log those clicks, and worse, a moderator who reloads the page or revisits later may suddenly see WordPress directly with no cloaking layer at all. - Direct overwrite without an include: If you only swap the files without telling the cloak how to render WordPress in place, the homepage may load WordPress directly (cloak never runs) while every internal link 404s, or you get the opposite — the homepage cloaks correctly but every internal page shows the wrong (offer) content because the engine has no idea what page WordPress was asked for.
✅ The Correct Method: "Loading (Local File)" White Page
CyberCloakTDS has a white page mode built specifically for this scenario: Loading (Local File). Instead of redirecting the browser to another URL, the engine includes the local PHP file directly from inside index.php while keeping the original request untouched. This one detail is what makes WordPress integration work correctly:
- 📍 The browser's address bar never changes — the visitor stays on your campaign domain the entire time.
- 🧩
$_SERVER['REQUEST_URI'](the exact path the visitor asked for — homepage, a blog post, a category page, anything) is preserved across the include. - 🔄 WordPress receives that original request path, runs its own routing exactly as it normally would, and renders the correct page — homepage, post, category, search results, all of it.
- 📊 Every single visit — including internal navigation inside WordPress — still passes through the cloak first, so your click logs stay accurate and bots/moderators always see the cloak's verdict applied.
🔧 Step-by-Step Setup
📄 Step 1 — Rename WordPress's Entry File
On your campaign domain (where WordPress is already installed and running normally), locate the existing index.php in the web root and rename it to something that will never collide with the cloak's file — for example site.php or wp-front.php. Do this through your hosting file manager or FTP/SFTP. WordPress itself does not care what its front-controller file is named — it only matters that something correctly loads wp-blog-header.php and the WordPress bootstrap, which the renamed file still does untouched.
index.php can take the original spot.⚙️ Step 2 — Build Your Flow with the Correct White Page Type
Go to Flows → New Flow (or edit your existing flow) and in the white page section, choose Loading (Local File) as the white page type. In the file path field, enter the path to the renamed WordPress entry file relative to your domain root — for example:
site.php
Configure the rest of the flow exactly as you would for any other campaign — Offer URL, traffic filters, Block Bots, Block VPN, click limits, warmup mode. None of that changes for WordPress integrations. The only thing that's different is the white page type and path.
📥 Step 3 — Download and Upload index.php
Save the flow and click Download index.php. Upload this file into the web root of your campaign domain — the exact same folder where WordPress lives, and the exact same location where the original index.php used to be. The filename must be exactly index.php so the web server treats it as the default entry point.
At this point your folder structure should look like this:
public_html/ ├── index.php ← cloak's generated file (NEW — this runs first) ├── site.php ← renamed WordPress entry file (the OLD index.php) ├── wp-admin/ ├── wp-content/ ├── wp-includes/ ├── wp-config.php └── .htaccess
🧹 Step 4 — Disable Page Caching, Then Purge It
Cloaking depends entirely on PHP making a fresh, per-visitor decision on every single request. A page cache defeats that by serving the same saved HTML to everyone — bot or real visitor, no difference, no decision made.
| What To Do | Why It Matters |
|---|---|
| Open your caching plugin's settings (e.g. LiteSpeed Cache → Cache tab) | This is where full-page caching is toggled on or off |
| Turn Enable Cache OFF completely | Stops the plugin from intercepting requests at the server level going forward |
| Click Purge All immediately after disabling | Removes any HTML pages that were already cached before you turned it off — without this, old cached pages keep being served until they naturally expire |
Do NOT manually edit .htaccess cache rules |
Most caching plugins auto-regenerate their .htaccess block on every save — manual edits get silently overwritten |
🧪 Step 5 — Test Thoroughly Before Going Live
Open your campaign domain in a fresh incognito window and confirm:
- ✅ The homepage loads correctly and a click log entry appears with the expected verdict
- ✅ Clicking through to internal pages (a blog post, a category, an "about" page) renders the correct WordPress content — not the offer page, not a 404
- ✅ Each navigation generates exactly one click log entry — not zero, not two
- ✅ Set your own IP in the flow's Filter List as an allow-rule and confirm the offer page opens correctly when you visit from that IP
🤖 What CyberCloakTDS Already Handles For You
WordPress sites run dozens of background requests that real visitors never see — SEO plugin analytics pings, REST API calls from page builders, scheduled cron triggers, RSS feeds, asset requests for icons. None of these are real "visits" and none of them should ever generate a click log entry or be evaluated as a visitor. Every index.php generated by CyberCloakTDS automatically detects and skips these system-level requests before they ever reach the cloaking engine — including:
- 📁
favicon.ico,apple-touch-icon*.png,robots.txt— browser auto-requested assets - 🔄
/wp-json/...— the WordPress REST API gateway used by Rank Math, Yoast SEO, WooCommerce, Elementor, Jetpack, and most modern plugins for background analytics and AJAX calls - 🛡️
/wp-admin/...,/wp-includes/...,/wp-content/...— WordPress core and asset directories - ⚙️
xmlrpc.php,wp-cron.php— WordPress system endpoints - 📡
/feed/— RSS/Atom feed routes
index.php automatically. This is what keeps your click counts accurate and prevents the "double entry" issue that plagues naive WordPress cloaking setups on other platforms.🚨 Common Mistakes to Avoid
| ❌ Mistake | What Happens | ✅ Correct Approach |
|---|---|---|
| Setting white page type to "Redirect URL" pointing at the renamed WordPress file | Browser address bar changes, visitor leaves the cloak permanently, internal clicks are never logged | Use Loading (Local File) so the include preserves the request and address bar |
| Leaving page caching enabled "just to test" | Same cached HTML gets served to everyone regardless of bot/real-visitor status — cloaking effectively does nothing | Disable full-page cache and Purge All before testing anything |
| Renaming the cloak's downloaded file instead of WordPress's file | WordPress remains the front controller, cloak never executes, offer is exposed to everyone including bots | The cloak's file must be named exactly index.php in the web root; WordPress's original file is the one that gets renamed |
| Forgetting to re-download after changing flow settings | Live site keeps running on the old configuration baked into the previously downloaded file | Always re-download and re-upload index.php after any flow change — settings are baked in at download time, not synced live |
🏁 Final Checklist
- 📝 WordPress's original
index.phprenamed (e.g. tosite.php) — contents untouched - ⚙️ Flow's white page type set to Loading (Local File), path pointing to the renamed file
- 📥 Cloak's downloaded
index.phpuploaded to the exact same web root, named exactlyindex.php - 🧹 All full-page caching plugins/features disabled and Purged completely
- 🔍 Homepage and at least two internal pages tested and rendering correctly
- 📊 Click Logs show exactly one entry per visit with the expected verdict
- 🧪 Test IP added to filter list and offer page confirmed working from that IP