{CODICTS} Snippets is now available

Voxel Stats Padder

The {CODICTS} Voxel Stats Padder plugin generates realistic artificial visit data and injects it into the Voxel Theme’s statistics system. It populates your analytics dashboards with configurable dummy traffic — useful for demonstrations, client presentations, testing, and giving new directory sites a credible data foundation.

Installation & Activation

Start by downloading the plugin from the Downloads page on your dashboard on the CoDicts website.

After downloading, install and activate the plugin in WordPress by navigating to “Plugins” > “Add New” > “Upload Plugin” and selecting the downloaded zip file. Click “Install Now” and then “Activate”.

Once activated, navigate to “Stats Padder” in the WordPress admin sidebar to configure your settings.

Before you start: Make sure statistics tracking is enabled in Voxel → Settings → Statistics for the post types you want to pad. Only post types with tracking enabled will appear in the Stats Padder settings.


Key Features

FeatureDescription
Automated Daily PaddingA daily cron job automatically generates artificial views every day.
Per-Post-Type ControlEnable padding independently for each Voxel post type.
Voxel Filter TargetingUse Voxel’s search filters to target specific subsets of posts.
Realistic DataGenerates randomized visitor profiles with realistic IPs, browsers, operating systems, devices, countries, and referrers.
Daily Traffic VariationConfigurable “Daily Bias” creates natural-looking ups and downs in traffic volume.
Backdate SupportPad data retroactively for up to 100 past days.
Custom ReferrersDefine weighted referrer domains for realistic traffic sources.
Batch ProcessingMulti-stage pipeline prevents server timeouts on large datasets.
Unlisted Taxonomy PaddingGenerate views tied to taxonomy terms without a specific listing.
Safe CleanupDelete all artificial data with one click — real traffic is never affected.

How It Works

The plugin creates fake visit records and inserts them into Voxel’s wp_voxel_visits database table. Each record looks like a real visit — with a simulated IP address, browser, operating system, device type, country, referrer, and a randomized timestamp within the target day. Voxel’s built-in analytics then displays these records alongside any real traffic.

All artificial records are flagged internally with a c_artificial marker, so they can always be identified and deleted without affecting real data.

The plugin supports two padding modes:

ModeDescription
Listed Post PaddingGenerates views for specific Voxel posts matching your filter criteria.
Unlisted Taxonomy PaddingGenerates views tied to taxonomy terms (categories, tags, etc.) without a specific listing. Useful for boosting category-level analytics.

Settings Overview

Navigate to “Stats Padder” in the admin sidebar to access the settings page.

Concurrent Insert Process

SettingDefaultDescription
Process Records1Number of records to insert per batch cycle. Higher values insert faster but use more server resources. Increase this if padding is running too slowly; decrease if you experience server timeouts.

Daily Bias

Daily bias controls traffic volume variation — instead of inserting exactly the same number of views every day, the bias randomly scales the total by a percentage within your configured range.

SettingDefaultDescription
Min %100Minimum percentage of views to insert (1–100).
Max %100Maximum percentage of views to insert (1–100).

Examples:

Min / MaxEffect
100 / 100No variation — full views every day.
70 / 80Very consistent — slight daily variation.
40 / 100Natural-looking ups and downs in traffic.

Tip: For the most realistic-looking analytics, use a range like 40–100. This creates the kind of natural variation you’d see in real traffic.


Configuring Post Type Padding

For each Voxel post type that has statistics tracking enabled, you’ll see a configuration section in the settings.

Step 1: Enable the Post Type

Toggle the switch to enable padding for the post type.

Step 2: Add Filter Groups

Each post type supports multiple filter groups. A filter group lets you target a specific subset of posts with independent settings. Click “Add” to create a new filter group.

Step 3: Configure Each Filter Group

SettingDescription
Voxel FiltersUse Voxel’s search filters (categories, keywords, etc.) to target which posts receive padded views. Leave empty to target all posts of this type.
Min PaddingMinimum number of views per post per day.
Max PaddingMaximum number of views per post per day. The actual number is randomized between min and max.
Unique Chance %Probability (0–100) that each view comes from a unique visitor vs. a returning one.
CountriesRestrict generated views to specific countries. Leave empty for a worldwide distribution based on population weights.
Custom ReferrersAdd weighted referrer domains (see Custom Referrers).
Site WeightWeight percentage for your site’s own URL as a referrer (direct/internal traffic).

Example setup — a restaurant directory:

Filter GroupFiltersMinMaxPurpose
Group 1Category: “Fine Dining”1540Premium restaurants get more views
Group 2Category: “Fast Food”515Standard restaurants get moderate views
Group 3(no filters)28All other restaurants get baseline views

Custom Referrers

Each filter group lets you define weighted referrer domains that appear as traffic sources in the analytics. This creates realistic-looking referral traffic.

Your site’s own URL is always included as a referrer (representing direct or internal traffic), with a configurable weight. You can add additional domains with their own weights.

Example:

ReferrerWeightApproximate Share
Your site (direct)30~33%
https://google.com40~44%
https://facebook.com20~22%

The weights are relative — they don’t need to add up to 100. The plugin calculates probabilities proportionally.


Realistic Data Generation

Each artificial visit record is generated with a full visitor profile to look realistic in Voxel’s analytics:

Data PointHow It’s Generated
IP AddressRandom IP from residential-like ranges.
Operating SystemWeighted random: Windows (~38%), macOS (~21%), Android (~17%), Linux (~13%), iOS (~6%), others.
BrowserWeighted random: Chrome (~65%), Firefox (~10%), Safari (~10%), Edge (~8%), others.
Device TypeWeighted random: Mobile (~60%), Desktop (~40%).
CountryWeighted by population/internet usage (250+ countries), or restricted to your selected countries.
ReferrerWeighted random from your configured referrer domains.
TimestampRandom time within the target day.

The plugin also maintains a global visitor pool during each run. When the “Unique Chance” setting allows a returning visitor, the plugin reuses a profile from the pool rather than creating a new one. This simulates realistic returning-visitor patterns.


Running the Padder

Automatic Daily Padding

Once configured, the plugin runs automatically every day via WP-Cron. It generates views for the current day based on your settings. If the cron was missed for any reason (server downtime, etc.), the plugin automatically catches up on all missed days the next time it runs.

Manual Padding & Backdating

On the right side of the settings page, you’ll find the Padding Data panel:

1. Enter the number of past days to backdate in the “Days Ago” field (0–100). Set to 0 to pad only today.

2. Click “Start Padding”. The plugin begins generating and inserting data.

3. A progress bar shows the current status, including which day is being processed and how many records have been inserted.

Note: For large datasets (many posts × many days), the batch processor runs in the background via WP-Cron. You can leave the page — processing continues automatically. Return to the settings page to check progress.

Cancelling a Run

If you need to stop a running batch, click “Cancel Padding”. This stops processing and cleans up temporary data. Records already inserted will remain in the database.


Unlisted Taxonomy Term Padding

The unlisted taxonomy padder generates views that aren’t tied to any specific listing. Instead, they’re associated with taxonomy terms (categories, tags, etc.) for boosting category-level or tag-level analytics.

SettingDescription
Enable ToggleTurn on/off unlisted taxonomy padding.
Taxonomy SelectsChoose specific terms from any public taxonomy.
Include All TermsAutomatically include every term for a taxonomy instead of selecting individually.
Empty Terms OnlyWhen enabled, only pads terms that currently have zero views.
Listing Type FilterWhen “Empty Terms Only” is enabled, filter the empty check against specific listing types.

Deleting Artificial Data

Click “Delete Artificial Data” on the settings page to remove all artificially generated visit records from the database. You will be asked to confirm before deletion proceeds.

This only removes artificial records (flagged with the c_artificial marker). Real visitor traffic is never affected.

Tip: If you’re testing different settings, you can safely delete and re-generate data as many times as needed.


Custom Functions (For Developers)

Developers can extend the padding behavior with two custom PHP function hooks, configured per filter group in the settings.

Custom Target ID Function

Provide a PHP function name to generate a custom c_target_id value for each view record. The function receives the post ID and should return a string (max 16 characters).

// For listed posts
function my_custom_target_id( $post_id ) {
    return substr( md5( $post_id . '_custom' ), 0, 16 );
}

// For unlisted taxonomy terms
function my_taxonomy_target_id( $taxonomy_term_groups ) {
    // $taxonomy_term_groups = ['category' => ['restaurants', 'cafes'], ...]
    return 'tax_' . substr( md5( json_encode( $taxonomy_term_groups ) ), 0, 12 );
}

Custom Multiplier Function

Provide a PHP function name that dynamically multiplies the view count for each post. The function receives the post ID and should return a number.

function my_view_multiplier( $post_id ) {
    // Featured posts get 3x views
    $is_featured = get_post_meta( $post_id, '_is_featured', true );
    return $is_featured ? 3 : 1;
}

Note: Custom functions must be defined in a file that loads before the cron runs (e.g., your theme’s functions.php or a mu-plugin). Errors in custom functions are silently caught and logged — the padder continues with default behavior.


ClickHouse Compatibility

If you use the {CODICTS} Voxel ClickHouse Visits plugin for high-performance analytics, the Stats Padder integrates automatically. When the ClickHouse plugin is active, record insertion and deletion are delegated to the ClickHouse handler instead of using direct MySQL queries. No additional configuration is needed.


Troubleshooting

“Voxel Theme Not Detected” Error

Ensure the Voxel Theme is installed and set as the active theme. Go to Appearance → Themes to verify.

No Post Types Showing in Settings

Enable statistics tracking in Voxel → Settings → Statistics for the post types you want to pad. Only tracked post types appear in the Stats Padder settings.

Padding Not Running Automatically

CauseSolution
DISABLE_WP_CRON is set to trueEither set it to false in wp-config.php, or set up a server-side cron job to trigger WP-Cron externally.
Cron event not scheduledDeactivate and reactivate the plugin to re-schedule the daily cron.
Batch stuckClick “Cancel Padding” on the settings page and restart.

Padding Produces No Data

CauseSolution
Min/Max set to 0Set both Min and Max to values greater than 0.
No posts match filtersCheck that your Voxel filter criteria match existing published posts. Try removing filters to target all posts.
All posts already processed todayThe padder skips posts that have already been padded for the current day. Use manual backdate to reprocess past days.
Daily Bias too lowIncrease the Daily Bias Min percentage. A very low value might result in very few records on some days.

Batch Process Stuck or Not Progressing

1. Click “Cancel Padding” on the settings page.

2. If that doesn’t resolve it, manually delete the codicts_voxel_stats_padder_batch_processing option from the wp_options table in your database.

3. Click “Start Padding” to restart.

Data Not Showing in Voxel Analytics

Check that the generated records exist in the wp_voxel_visits table. Verify the post_id values match published Voxel posts, and that the timestamps fall within the date range you’re viewing in the analytics dashboard.

Custom Function Not Working

CauseSolution
Function not loadedEnsure the function is defined in functions.php or a mu-plugin so it’s available when WP-Cron runs.
Function throwing an errorErrors are silently caught. Check the PHP error log for details.
Return value too longTarget ID values must be 16 characters or fewer.

“Delete Artificial Data” Not Removing All Records

If you use the ClickHouse plugin, make sure the ClickHouse handler properly implements the deletion action. For standard MySQL setups, verify the c_artificial column exists in the wp_voxel_visits table — the plugin creates this column automatically on activation.


For further support, visit codicts.com or contact us at support@codicts.com.

CoDicts Co., Ltd. © 2021-2026. All rights reserved