Skip to content

Importing & Migrating

Voxel Points → Import brings balances and history over from myCred or a CSV file. Three things are true of every import, and they are what make it safe to run on a live site:

  • It can be undone. Undo reverses every imported entry rather than deleting it, so the import and its withdrawal both stay in the ledger. After an undo you can correct the source and import again.
  • It cannot double-credit. Every imported entry carries a unique key with a database-level constraint behind it. Re-running an import skips what already landed — that protection is in the database, not in a check a second browser tab could race past.
  • History keeps its original dates. Collapsing a year of activity onto migration day would wreck every past leaderboard period and make the whole membership look like it earned everything at once.

Always Preview first. It writes nothing and tells you how many entries and members are involved, how many would be skipped as already imported, and which rows match no member on your site.

myCred

myCred does not need to be active — its tables just need to still be present. That is deliberate: deactivate myCred first so the two systems can never both award for the same action, then import.

Two modes:

ModeWhat you getWhen to use it
Current balancesOne opening entry per memberFastest. Members keep their balance, but leaderboards for past periods will show nothing.
Full historyEvery entry, with its original dateSlower, but past-period leaderboards and member history stay accurate.

If your site runs more than one myCred currency ("Points", "Credits"), each is imported separately — pick the point type before importing. Import them one at a time; merging two currencies into one balance cannot be undone selectively.

Log entries whose text contains myCred %placeholders% (which only myCred itself can expand) are replaced with a readable note naming the original event, rather than carried across as literal junk.

CSV

Needs a points column and a way to identify members. Common header spellings are all accepted — email / user_email, username / user_login, user_id / id, points / balance / amount / credits. A note and a date column are optional.

email,points,note,date
[email protected],250,Legacy balance,2025-03-04

Members are matched by email first, then username, then user ID. Rows matching nobody are listed in the preview and skipped — they never silently vanish. Dates that are missing, unparseable, or in the future fall back to now.

Past activity on this site

The third source on the Import screen is your own site. Points are only awarded for things that happen after Voxel Points is installed, so a site that has been running for two years starts with every one of those reviews, posts and comments unpaid — and a badge like "10 reviews" can never be earned by the people who actually wrote them.

This goes back through that activity and awards it, keeping each award on the date the thing actually happened so past-period leaderboards and member history stay accurate.

What it can replay

SourceAwarded per
ReviewsEach review, per post type
Published postsEach published post, per post type
Timeline postsEach status
CommentsEach reply
RegistrationsEach member

Only rules you have enabled appear. A rule you have switched off does not start paying out retroactively just because the data exists — turn it on under Earning first, then come back.

What it deliberately leaves out

  • Daily visits. No record of past visits exists anywhere. Inventing one would be fabricating activity rather than recovering it.
  • Follows. Voxel's followers table stores no timestamp, so every follow would have to be awarded as "today", which would distort every past leaderboard.
  • Orders. The live rule carries test-mode, child-order and status checks that cannot be safely reproduced after the fact. Paying out money-backed points on a guess is not worth the convenience.

Before it runs, Check what this would award does a full dry run and reports, per source: how many items exist, how many are already awarded, how many a daily cap will hold back, and what the rest is worth. The total — "this will award 47,300 points to 210 members" — is shown before you confirm, because a bulk award is easier to prevent than to explain.

Daily caps still apply, but against the day the thing happened rather than today. A cap of 5 reviews a day means a member who wrote 9 reviews on one day two years ago is awarded for 5 of them, exactly as they would have been at the time.

It is safe to re-run. Every award carries the same identity the live engine would have used, behind a database-level constraint — so anything already awarded is refused outright, not by a check a second tab could race past.

Undo reverses only what that run awarded. Anything a member earned normally while it was running is left alone, and any badge the run caused a member to cross into is taken back with it — badges you awarded by hand are never touched. Afterwards you can change the point values and run it again.

From the command line, where a very large site is better served:

bash
wp voxel-points backfill --dry-run
wp voxel-points backfill --rules=review:places,comment
wp voxel-points backfill-undo
wp voxel-points backfill-cancel   # abandon a run that stopped partway

The Import screen

Built by Code Wattz.