This plugin is designed to give you an error free import of a user/member to a WordPress/Paid Memberships Pro site. It supports both adding and changing user data. Unlike the “Import User From CSV Integration” add-on by Paid Memberships Pro, this “Import Members from CSV” plugin will verify the data you are trying to import during the import operation. This....
This plugin is designed to give you an error free import of a user/member to a WordPress/Paid Memberships Pro site. It supports both adding and changing user data.
Unlike the “Import User From CSV Integration” add-on by Paid Memberships Pro, this “Import Members from CSV” plugin will verify the data you are trying to import during the import operation. This is done to reduce the probability of problem after the import. If there are any errors/issues,information about the problem will be logged to the pmp_updates.log saved in the wp-content/uploads/
directory.
NOTE: You can run the import multiple times with the same/slightly modified import .csv file and the appropriate settings (see the FAQ/description below). If you configure the plugin settings correctly, this will only result in overwriting/changing the existing member data.
Using a CSV (Comma Separated Values) file, the will add users with basic user information as well as user meta data fields, the user role (if applicable) and the specified Paid Memberships Pro member configuration/information. It can also generate an order record to ensure your recurring subscriptions continue to get attributed to the imported member.
If you’ve exported the user’s passwords as hashed strings, you can import them without re-encrypting them again (by setting the option).
You can also choose to send a notification to the new users and to display password nag on user login.
This plugin supports Network Activation on a WordPress Multisite (WPMU) installation (see the settings page when using in a multisite configuration)
Check out my other plugins.
Features
- Imports all WP User database table fields
- Imports user meta
- Imports PMPro membership data
- Update existing users if they already exist in the WP Users database (if the option is selected)
- Overwrite preexisting membership records for the same membership level as is being imported (if the option is selected)
- Set/Update the user WordPress role for the member (if the role is specified in the import file)
- Sends new user a notification message (if the option is selected)
- Deactivate the standard WordPress user update email notices during the import operation
- Shows password nag on user login (if the option is selected)
- Allows large user/member import without having to configure the PHP max_execution_time variable (if the option is selected)
- Import hashed password for new/updating users (if the option is selected)
NOTE: The plugin may not import some of data if it detects a problem. To find out what the problem was, read this documentation and the FAQ section to ensure you have correctly formatted all of your import data.
For feature request and bug reports, please use the issues section on GitHub.
Code contributions are welcome on Github.
NOTE: In order to hide the “Donation” button after a donation, this plugin will attempt to track the admin’s IP address. This action may have GDPR implications for you or your administrators.
The tracking information is stored in the WordPress options table (wp_options) using the e20r_import_has_donated
option name and can safely be deleted in the database if you do not wish to leave it. Deleting the option from the database will obviously re-enable the Donation nag.
The Nag tracking can be disabled altogether with the e20r_import_donation_tracking_disabled
filter:
add_filter( 'e20r_import_donation_tracking_disabled', '__return_true' );'
Importing the Sponsored user
To link sponsored users with their sponsors, add the pmprosm_sponsor
column to your import file.
On the data row for the sponsored user, the pmprosm_sponsor column must contain the user key for the sponsor you want to link them with.
Or, if they don’t have a sponsor, that column must be blank.
The sponsor key is either the email address they used when registering on your system – or the user_email column value for their user record if they’re also being imported at the same time, the WordPress user ID value (numeric), or the login name used (user_login value).
Importing the Sponsor
First of all, you will need to include a pmprosm_seats
column as well. This column contains a numeric value to indicate the number of seats (sponsored users) this user has paid to sponsor.
When importing a sponsor there are a couple of scenarios;
1) The system already contains the sponsor code (a sponsor code is a PMPro discount code prefixed with the letter ‘S’) and you simply need to link the sponsor to their code.
2) The system lacks the sponsor code, so you’ll need one to be created.
For scenario 1; The sponsor code (discount code) already has a Discount Code ID (integer value, found on the PMPro “Discount Codes” settings page). This ID needs to be added in the membership_code_id
column of the import file for the sponsor (user record), along with a numeric value in the pmprosm_seats
column.
For scenario 2; The sponsor code is created by this plugin. It happens automatically if the sponsor user exists – or is being imported at the same time as – when the sponsored user is attempted imported and linked. The discount code created attempts to use the settings from the PMPro Sponsored Members add-on for the discount code.
Caveat
The order in which users are listed in the .csv import file can matter when importing sponsors and their sponsored user.
Although this plugin tries to re-import sponsored users if the import fails the first time, as part of the clean-up process, this retry does not guarantee success!
As a result, it is possible that a sponsored user is imported without being linked to their sponsor.
You can fix that by running the import more than once.
Alternatively, you can create two import files;
One with the sponsor users only, and one with the sponsored users only.
Then import the sponsors first. Next you import the sponsored users.
Can this plugin be used to import order data for Paid Memberships Pro?
As of version 2.20, we have an option to create member orders at the same time as we update the membership record.
That means you can now include some of the order table fields to import custom values as needed for each user/member, along with updating/adding their membership level information.
The supported order record columns are:
- paypal_token
- subtotal
- tax
- couponamount
- checkout_id
- certificate_id
- certificateamount
- total
- payment_type
- cardtype
- accountnumber
- expirationmonth
- expirationyear
- status
- gateway
- gateway_environment
- payment_transaction_id
- subscription_transaction_id
- timestamp
- affiliate_id
- affiliate_subid
- notes
- billing_street (*)
- billing_city (*)
- billing_state (*)
- billing_zip (*)
- billing_country (*)
- billing_phone (*)
All of these columns/fields should be prefixed with ‘membership_’. I.e. ‘membership_paypal_token’ or ‘membership_tax’, etc. The exceptions are the ‘user_id’ and ‘membership_id’ columns/fields which should be left as ‘user_id’ and ‘membership_id’ respectively if you want to include them in the import operation(s).
The ‘status’ column has a limited number of valid values. By default, we recommend using either ‘success’ or ‘cancelled’
All timestamp values (‘timestamp’) must use the same format as the one used by the MySQL database’s ‘DATETIME’ format: YYYY-MM-DD HH:MM:SS
PLEASE NOTE:
Although you can specify an account number (accountnumber) in the import file, doing that will not result in this plugin importing and activating subscriptions or payments by credit card.
You CANNOT use this tool to import and create subscription plans, or transactions, on the payment gateway for your Paid Memberships Pro users.
Including anything other than a masked Credit Card number for the “membership_accountnumber” column is a really bad idea[1]!
A masked credit card number = Only the last 4 digits are real and the rest are repetitions of the ‘X’ character (XXXXXXXXXXXX1234).
[1] = Importing a full credit card number will exponentially increase the probability that you, in the event of a security problem on your site, will have to pay the Payment Card Industry (PCI) massive fines. Simply put; Don’t import Credit Card information! Instead, ask your members to resubmit their information when the site is back online/live.
This plugin does NOT mask your credit card numbers for you!
Supported membership_gateway options
The Import Members from CSV plugin supports specifying different payment gateways for the user record(s) when importing order data (i.e. the “Attempt to create PMPro Order record” option has been selected). At present, the payment gateways that can be specified in the membership_gateway
column are:
- authorizenet
- braintree
- check
- cybersource
- payflowpro
- paypal
- paypalexpress
- paypalstandard
- stripe
- twocheckout
During the import operation, the plugin will verify that the specified payment gateway integration is one of the supported payment gateway integrations for Paid Memberships Pro.
Specifying a Payment Gateway Integration that has not been configured for use during the PMPro checkout process would render the order record invalid.
NOTE: The limitations to how Paid Memberships Pro supports/handles multiple payment gateway integrations at the same time still apply.
Adding billing address information to the PMPro Order import
The normal way to import billing address data to the database for a member/user is to use the pmpro_b[*]
fields (pmpro_bfirstname, pmpro_blastname, pmpro_baddress1, pmpro_baddress2, pmpro_bcity, pmpro_bstate, pmpro_bzipcode, pmpro_bcountry and pmpro_bphone).
If the pmpro_b* field data is present in the row and the ‘Add order’ option is selected for the import file, the import will attempt to populate the order billing information using the pmpro_b* data.
How should the .csv file be defined?
This plugin assumes that the .csv file;
- Uses a comma (,) character to denote a new column in a row
- Uses a double-quote (“) character to wrap the contents of each of the columns
- Uses a backslash () character as the escape character
For example;
To have a 2 column .csv file, each row after the header row, the row should look something like this: "my first column data","my second \"escaped\" column data"
.
The application you use to edit and export your .CSV file will need to be configured appropriately before you export the .csv file.
Why am I or my users not receiving New user notifications
There are a couple of possible reasons, as far as I can tell. The functionality in WordPress that generates the “new user notification” message is what they call “pluggable”. That means that it’s possible for a plugin (any plugin!) to override the behavior of the functionality. So the first thing I’d suggest investigating is whether you have a pluing active that intentionally changes/modifies/updates how the wp_new_user_notification()
function works/behaves.
Next, it’s (very) possible that your hosting environment doesn’t want you to be sending out a lot of email messages from their servers. As a result, the import operation could potentially trip their anti-spam measures and blocking you from sending any messages.
Third, the recipient email server may be using a SBL (Spam Black List) and have your web server IP listed as a typical source of Spam messages (it happens, a lot).
I’ve set the ‘membership_status’ column to ‘inactive’, but the user’s imported membership level is currently ‘active’?
This is due to what I’d term a bug in Paid Memberships Pro. This issue doesn’t currently have a fix.
Basically, the ‘inactive’ status will only apply to the order record (if it’s created, see above) and not to the user’s membership status.
NOTE: Assigning a membership level for a user will cause them to be given an active membership on the site when the import operation is complete, regardless of the value supplied for the ‘membership_status’ column.
How do I import an existing payment plan (recurring billing plan) for a user?
This only works if the plan already exists on the payment gateway itself.
There is no way to use this plugin to import a new member/user and have the system create a recurring billing plan for them.
Can I use this plugin to create new billing plans or trigger charges on the payment gateway for an imported user?
No.
What are the constraints for WordPress Multisite import operations?
As documented by Paid Memberships Pro, the PMPro plugin cannot be Network Activated.
This import plugin will work from the site(s) where PMPro is active and have the same membership level IDs identified as are listed in the membership_id
column of the import file you’re using.
If your primary site has a configured and active Paid Memberships Pro installation, you could theoretically start the plugin from the Network Admin dashboard (which will send you to the primary site anyway).
The users being imported will only be linked to the site you import them to. Their membership data will only be visible on the PMPro site(s) that have the membership level ID(s) configured that match those in the import file.
Welcome Email Message (imported_welcome.html template) issues
If you selected the “Send the imported_member.html welcome email” option and your users still aren’t receiving messages,
please make sure the ‘membership_status’ field is included in the import .csv file and contains the active
value.
As a design philosophy, we treat an inactive member as somebody who should not receive welcome messages (you may disagree..?)
What GDPR impacted data is stored by this plugin?
Obviously, there’s the user data that this plugin is designed to import. This plugin does not track, report, or allow download/deletion of any data it imports. There are (now or soon) other plugin options to handle those requirements from the GDPR legislation.
In an attempt to make the “Donation” button less intrusive, we attempt to track the computer (IP) address when somebody clicks the button. This plugin does not link the IP address to a user account, so it should be a little more challenging to identify the person who clicked the “Donate” button for any 3rd party who gets access to your database than simply looking at the options saved by this plugin.
The IP tracking information (the IP address) is stored in the WordPress options table (wp_options
) using the e20r_import_has_donated
option name. That option can safely be deleted in the database if you do not wish to have IPs tracked. Deleting the option from the database will obviously re-enable the Donation nag.
As long as this plugin remains installed and active on the server, the tracked IP address will automatically be removed from the option 2 months after the admin clicked the Donation button.
The option is removed when the plugin is deactivated in the “Plugins” admin panel.
Nag tracking can be disabled altogether with the e20r_import_donation_tracking_disabled
filter: add_filter( 'e20r_import_donation_tracking_disabled', '__return_true' );'
Be Part of the Conversation with WordPress Enthusiasts
Using Import Members from CSV f...? Great, join the conversation now!
Let’s talk about overall quality, ease of use, stellar support, unbeatable value, and the amazing experience Import Members from CSV f... brings to you.