Debugging php code that’s run by WordPress Cron is difficult because:
1) If you don’t know how to force the wp-cron job to run, you have to wait for it to be called on schedule. WP-Cron jobs are often run on an interval like hourly, daily, etc.
2) You can’t see any error messages on the website, even if you have WP-DEBUG set to TRUE.
Today I’ve had a lot of success in debugging wp-cron jobs. This is what I now know how to do, and I’m saving it here for my own future reference, and perhaps it will help you too!
Force WP-Cron Job to Run
This worked for me in WordPress 4.2.2
1. Install the plugin Core Control.
2. In WordPress Admin, go to Tools->Core Control.
3. Check off “Cron Module” and click save.
4. Click the link “Cron Tasks”
5. Click on “Run Now” next to the cron job you are debugging.
6. If an error occurs, it will say “Error occurred” at the top of the page.
View PHP Error Messages
There are two ways I was able to view the error message today. There should be a better way, and perhaps there is, but this is what I figured out.
View PHP Error Log
It turns out that my development server, which is a WAMP setup, is already recording all php errors in this file:
If you are running a local server, you may discover that error messages are already being recorded. If not, here are instructions on how to set up the PHP error log for WordPress.
Because the log file had been recording errors (and notices) for what seems like a century, the file was huge. To simplify debugging, I deleted the log file contents and saved it as a blank file. Then I ran my cron job and checked the file again. Ta-da! My error was prominently displayed.
View PHP Error Message in PHP Storm with XDebug
If you can’t log errors or view the PHP error log, you can view the error while debugging… Keep reading to find out how…
Fix Problems that Don’t Cause Error Messages
Sometimes programming errors are errors in logic, or errors where you use the wrong variable (maybe a typo) and it doesn’t throw an exception but rather the program just doesn’t work correctly.
These are the 3 pieces of software I use to debug WordPress and PHP:
- PHP Storm
- XDebug Helper Chrome Extension
These are the tutorials I used to set up debugging:
How I debugged the WordPress Cron Job
- Set a breakpoint on the first line of the function called by wp-cron.
- Click “Play”
- When it stops at my breakpoint, click “Step Into” repeatedly until I see my error.
In my case, the error message was displayed in the debugger, next to the error_handler function (see the line above the blue line). The text is gray, but it shows the contents of the $message variable:
And there you go, one more way to view your PHP error. Hope this has helped you. If you have any questions, I will try to answer them.
More About WP-Cron
WP-Cron can cause WordPress problems and might make your site run slow. But, cron jobs often do very important tasks and disabling them will cause problems. Here is how to fix this issue: