0

I have created a WP cron job, my code for the cron job is shown below:

    public function run_import(){
      if ( isset($_POST["run_import"])) {
        add_action( 'import_execution_event_test', array($this, 'run_execution_script' ));

        if(!wp_next_scheduled('import_execution_event_test')){
                    wp_schedule_event( time(), 'every_two_minutes', 'import_execution_event_test');
        }
      }
     include ( plugin_dir_path( __FILE__ ) . 'views/view-import.php' );
    }

Bear in mind here, I also have a custom schedule time here of every two minutes.

This is the function that should be executed every two minutes:

public function run_execution_script() {
        $curl = curl_init();
        curl_setopt_array($curl, array(
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_URL => 'http://dev2.mydevs.co.uk/wp-cron.php?import_key=_GNIHMERsu&import_id=8&action=processing',  
        CURLOPT_USERAGENT => 'Test Curl Request',
        ));
        $resp = curl_exec($curl);
        curl_close($curl);
    }

All the the method does is make simple curl request, this curl request does work if I call the method manually.

So to summarize, the cron even does appear in the wp cron schedule, it appears to be being triggered every two minutes as expected, but my curl request isn't functioning from the cron.

Does anyone have any ideas why this might be?

6
  • Could you show a bit more context around your add_action as well as run_execution_script? Also, not a big deal but you should be using wp_remote_get() instead of cURL directly.
    – kovshenin
    Apr 4, 2016 at 9:51
  • Did you register every_two_minutes ?
    – Sumit
    Apr 4, 2016 at 9:59
  • @Sumit I did yeh, it now appears in the schedules array with the correct interval of 120 seconds
    – Liam
    Apr 4, 2016 at 10:01
  • @kovshenin, thanks I've added some more context, I'll look in to wp_remote_get(); I didn't realize it existed.
    – Liam
    Apr 4, 2016 at 10:08
  • You know that WP Cron is triggered by a website visit, so if you don't get any traffic within 2 minutes, it won't run?
    – TomC
    Apr 4, 2016 at 10:36

1 Answer 1

3

In your code you have:

if ( isset( $_POST["run_import"] ) ) {
    add_action( 'import_execution_event_test', ...

But when wp-cron.php is spawned, there's probably no POST variable called run_import, so your action is never added, and thus not triggered.

2
  • Ah OK, I think I have misunderstood how this works then. My understanding was the add action was only called once initially, I didn't realize it needed to be accessible each time the cron runs. I'll give this a switch around and retry. Thanks
    – Liam
    Apr 4, 2016 at 10:55
  • Yeah, what happens during a cron run is pretty much do_action( 'your_action' ); so if you have not added any callbacks to your action, then nothing's going to run.
    – kovshenin
    Apr 4, 2016 at 11:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.