İşin cron işi tarafından çağrılıp çağrılmadığını kontrol edin


13

Sadece bir cron işi ile çalıştırmak istiyorum bir işlevi var. Belirli bir zamanlanmış olayın bu işlevi çağırdığını kontrol etmenin bir yolu var mı?


3
Btw: Ödüllendirilmezse ödül kazanmazsınız. Zaten bir cevabı çözüm olarak işaretlediğiniz için, lütfen kullanıcıya da ödül verin. Teşekkürler.
Kaiser

Yanıtlar:


18

WordPress, DOING_CRONcron işlerini yaptığımızı bilmemize yardımcı olan bir sabite sahiptir . wp-cron.phpDosyada tanımlanmıştır .

Böylece, bu sabiti kodunuzda kontrol edebilirsiniz:

if ( defined( 'DOING_CRON' ) )
{
    // Do something
}

2
WordPress 4.8.0'dan wp_doing_cron()itibaren kullanılabilir.
Joe

2

18017 numaralı soru için yazdığım »Cron API denetçisine« bir göz atın . Eklenti, sayfanın -hook / sonunda gösterilen bir tablo oluşturur .shutdown

_get_cron_array()Tüm kayıtlı ve zamanlanmış eylemleri almak için bu işlevi kullanır . Başka bir yararlı işlev wp_get_schedules(). Üçüncü yol, temel verileri _get_cron_array()doğrudan arayarak çağırmaktır get_option( 'cron' );- WP çekirdeğinden varsayılan API işlevlerini kullanmak daha iyidir.

Şu anda bir Cron İşinin içinde olup olmadığınızı öğrenmek istiyorsanız, kontrol edebilirsiniz defined( 'DOING_CRON' ) AND DOING_CRON.


1

Ben eğitim geliştirme değilim (ben sadece bir meraklıyım) ama bence olaya bir add_action ekleyebilirsiniz

Sadece bir özgeçmiş ...

//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
   }
}

Bu argümanın bulunduğu "cron" fonksiyonunuzun bir listesini almak için

     //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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.