Periksa apakah fungsi dipanggil oleh tugas cron

12

Saya memiliki fungsi yang hanya ingin saya jalankan melalui cron job. Apakah ada cara saya dapat memeriksa bahwa acara terjadwal tertentu memanggil fungsi ini dan bukan yang lain?

urok93
sumber
3
Btw: Anda tidak mendapatkan hadiah kembali jika tidak diberi hadiah. Karena Anda telah menandai satu jawaban sebagai solusi, tolong beri juga hadiah kepada pengguna. Terima kasih.
kaiser

Jawaban:

17

WordPress memiliki konstanta DOING_CRONyang membantu kita mengetahui bahwa kita sedang melakukan tugas cron atau tidak. Itu didefinisikan dalam wp-cron.phpfile.

Jadi, Anda dapat memeriksa konstanta ini dalam kode Anda:

if ( defined( 'DOING_CRON' ) )
{
    // Do something
}
Anh Tran
sumber
2
Pada WordPress 4.8.0 wp_doing_cron()dapat digunakan sebagai gantinya.
Joe
2

Lihat saja »Inspektur Cron API« , yang saya tulis untuk pertanyaan # 18017 . Plugin membangun tabel yang menunjukkan pada shutdown-hook / akhir halaman.

Ini menggunakan _get_cron_array()fungsi untuk mengambil semua tindakan yang terdaftar & dijadwalkan. Fungsi lain yang bermanfaat adalah wp_get_schedules(). Cara ketiga adalah memanggil data yang mendasarinya _get_cron_array()secara langsung, dengan menelepon get_option( 'cron' );- masih lebih baik menggunakan fungsi API default dari WP core.

Jika Anda ingin tahu apakah Anda saat ini berada di dalam Cron Job, maka Anda dapat memeriksanya defined( 'DOING_CRON' ) AND DOING_CRON.

kaisar
sumber
1

Saya tidak mempelajari pengembangan (Saya hanya penggemar) tetapi saya pikir Anda dapat menambahkan add_action ke acara tersebut

Itu hanya resume ...

//to the event
if(your_condition)
{
    add_action('original_event_to_hook', 'your_scheduled');
}

function your_scheduled()
{
    //create a param here
    //And shedule your function with arg
    wp_schedule_event(time(), 'hourly', 'your_function', array('param_1' => value));
}

function your_function($args){

   $verification = $args['param_1'];
   if($verification)
   {
      //OK
      //Eventually delete this schedule with this specific arg
   }
}

Untuk mengambil daftar cron Anda "fungsi_Anda" di mana ada argumen ini

     //Get a filtered list of cron hooks 
        function kw_filter_crons_hooks($hooks = false, $args = false)
        {
            $crons = get_option('cron');

            if (!$crons)
            {
                $crons[0] = NULL;
            }

            $filter = array();
            $cronlist = array();
            $schedule = array();

            foreach($crons as $timestamp => $cron)
            {
                //@param $hooks = string 'schedule'
                //@param $args = false
                //Return an array of cron task sheduled
                $schedule[] = $cron;

                if(!$schedule && $hooks == 'schedule' && $args == false)
                {
                    $schedule[0] = NULL;
                }

                foreach($hooks as $hook)
                {
                    if(isset($cron[$hook]))
                    {
                        //@param $hooks = array($hook);
                        //@param $args = false
                        //Return an array of cron task sheduled
                        $cronlist[] = $cron;

                        if(!$cronlist && is_array($hooks) && $args == false)
                        {
                            $cronlist[0] = NULL;
                        }

                        if(!empty($args))
                        {
                            foreach($cronlist as $key => $value)
                            {
                                foreach($value as $k => $v)
                                {
                                    foreach($v as $x => $y)
                                    {
                                        foreach($args as $arg => $val)
                                        {
                                            if ($y['args'][$arg] == $val)
                                            {
                                                //@param $hooks = array($hook);
                                                //@param $args = array($arg);
                                                //Return an array of cron task specified filtered by arg
                                                $filter[$x] = $y;
                                                if(!$filter && is_array($hooks) && is_array($args))
                                                {
                                                    $filter[0] = NULL;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }


            if(is_array($hooks) && $args === false && $cronlist)
            {
                return $cronlist;
            }
            else if(is_array($hooks) && is_array($args) && $filter)
            {
                return $filter;
            }
            else if($hooks === 'schedule' && $args === false && $schedule)
            {
                return $schedule;
            }
            else if($hooks === false && $args === false && $crons)
            {
                return $crons;
            }
            else
            {
                return false;
            }
        }

//Usage
    $cron_filtered = kw_filter_crons_hooks(array('your_function'), array('param_1' => value));
    var_dump($cron_filtered);
MonkeyTime
sumber