Over the past few posts, I’ve walked through a strategy that I’ve found to useful and effective when importing large CSV files into WordPress.
Up to this point, I’ve covered:
- How to setup the script to prevent timeouts
- Working to build a back end that supports visual cues on the front end
- How to display visual cues on the front use via Ajax
And the last part is by far the easiest: Clean up after yourself.
Cleanly Importing CSV Files into WordPress
If you’ve been following closely with the previous articles, then nothing in this post should come as a surprise, but I’m including it for the sake of completeness and for the sake of making sure that you keep a clean
php_error.log when someone uses your work.
After all, when something goes wrong with their installation, the last thing you want them to find is a bunch of residual files, records, log files spread throughout their server, right?
So in order to bring this thing full circle, we need to make sure that we’re removing the necessary things that we created when processing our CSV.
1. Partial CSVs
The first thing that you want to remember to clean up are all of the partial CSV files that are created during the first phase of the import.
Remember: We’re breaking a large file into n-number of smaller files so that we can import them sequentially to avoid timeout errors. The thing is, if you forget to actually delete the file after importing it, then you may run into problems with future imports.
For example, perhaps you’re only importing two files when four files exist. What happens then? Have you considered handling pre-existing records or handling duplicates?
All of the above are importing considerations but the primary point is that you need to make sure that for each file that you write, you delete, as well.
At least part of the process that’s involved in importing a large CSV file is rooted in saving options (as they are called in WordPress), transient data, or cache values.
Wherever you opt to save them doesn’t matter.
As long as you remember to delete the options once your process is complete, then you’re good to go. Remember, a number of the options that we’re saving are used to help calculate the percentage of progress the process has made in importing the files.
Forget to remove those options, or don’t properly write to them to begin with and your values could be skewed from every import after the first one.
3. The Timer
setInterval), it’s important to make sure that you clear the timeout once the process has completed.
Otherwise, the browser will continue to poll the server which will continue to return the response that the import is complete and you end up just bogging down the browser more than necessary.
So remember to pass a reference of your timer to
clearInterval() once your process has completed. That way, you’ve cleaned up the files, the records, and the browser is no longer doing anything to poll the server only the get the same response.
And that’s it.
Sure, there’s likely a lot of gaps that I didn’t feel when working on this, but the point wasn’t to provide a comprehensive overview of the topic – instead, it was meant to provide a high-level overview of how you may go about achieving this.
- Break the file into smaller files
- Read each file one at a time
- Save database records to track progress
- Clean up after yourself
Of course, it’s a bit easier than it sounds, right?