Working with imports or exports can be hard, especially on really large databases. WP CLI is a tool that helps you a lot. It can also help you with running imports or exports. If you expect large imports or exports, you can also create a WP CLI command for batch processing the data.
For doing batch imports or exports, you need a method with steps. For this tutorial, I will use the Easy Digital Downloads Batch import as an example.
You can find the code in their repository and you can also find an implementation for importing Downloads.
Creating the Command
Before creating the command, we need to make sure that we have the WP CLI installed.
Go ahead and activate the plugin. Now we will create the commands. If you try to run
wp help you might be able to find
batch there. If the class is without any public functions, that might not show up. So let’s do that now.
Generic Import Method
We will now create a generic import method that we can use for all kind of imports that are based on the class
This method is not available as a WP CLI command since we are going to use it internally. We are making sure at the beginning that our options are set, at least the defaults (just in case other methods do not provide them).
After that, we set the
per_step attributes so we can process the correct step and the correct number of data. Once that is set, we call the method
process_step. This method will return
false. If it’s
true, it will mean that we have more data to process in the next step.
Method to Batch Import Downloads
Now, let’s do the batch importing of downloads.
We are making sure that we have the options (again). We will use those options for batch importing at the end of the method.
Since we are importing downloads from a CSV, the first argument in
$args will have to be a path to the CSV file. To use the previously defined method
process_import we need to pass an object. This object will be instantiated from the class
We then pass all the arguments, options and our object to the method
process_import and wait for the return. If we have more to import, then we call this same command using
WP_CLI::runcommand and passing all the options also so we get to increment the
step through code.
You can read more about that command on the CLI handbook. There are a few options, but one in particular is interesting and that is the option
We can run the command now with
wp batch import_downloads PATH_TO_CSV.
Testing the Memory Usage
In a different WP CLI command that I’ve built for exporting coupons, I have also used a method to test the memory usage. I’ve copied the function from the php.net and transformed it into a method.
You can implement it before the above method calls itself to test various usages. If the option
launch is set to
false, it will use the existing process, otherwise it will start a new one.
For my test case, I’ve created around 35 000 coupons in WooCoommerce and here are my results using a similar approach for batch exporting:
- Exporting 35 000 coupon all at once – memory peak usage: 228.5 MB
- Exporting 35 000 coupons with
false– memory peak usage: 224.5 MB
- Exporting 35 000 coupons with
true– memory peak usage: 130.5 MB
WP CLI is a powerful tool and creating batch imports or exports can be really useful here. With options such as
launch, we can handle memory usage on a server much better and have a real batching system in place.
Have you tried using WP CLI before and create custom commands?Become a Sponsor