The WP All Import plugin can be used to import data from xml feeds. We use it in combination with WooCommerce. To automatically update your products and/or stock information, you should run this from a cron job. Unfortunately WP All Import didn’t do a very nice job on integrating this with the WordPress cron system, because I feel that the scheduling should be manager from your WordPress install instead of cronjob settings on the server.
WP All Import suggests that you set a cron job where you request an URL with wget. They already noticed a possible issue with this approach, which is timeouts. Therefore they created two actions: one to trigger the import, and a second one to process the import. When a timeout occurs, the process action should continue where it left of.
In our situation (nginx + php-fpm) this didn’t seem to work very well. The script was aborted after 30 seconds (which is what we have configured on the server ourselves), but when I re-requested the processing action, it said I should run the trigger action first. So, did the processing complete or not?
Since I don’t like running web requests from cron anyways, I searched for a method to run the import with PHP cli. This way we don’t have timeouts and the script will execute nicely. Also you can skip the “The processing URL should be run every two minutes because it may not finish your import in one run.” because it’s very unlikely that the script will timeout.
Enough chichat, here’s the line I added to /etc/cron.d/mywebshop:
0 6 * * * webshop cd /home/webshop/public_html; php -e -r 'parse_str("import_key=xxx&import_id=26&action=trigger", $_GET); include "wp-cron.php";' >/dev/null 2>&1; php -e -r 'parse_str("import_key=xxx&import_id=26&action=processing", $_GET); include "wp-cron.php";' >/dev/null 2>&1
Don’t forget to change the path to your WordPress install, and the import_key.