Controlla se la funzione è stata chiamata dal cron job


13

Ho una funzione che voglio solo eseguire tramite un cron job. C'è un modo per verificare che un particolare evento programmato stia chiamando questa funzione e non altro?


3
Btw: Non riceverai ricompensa se non ricompensato. Poiché hai già contrassegnato una risposta come soluzione, ti preghiamo di dare anche all'utente la generosità. Grazie.
Kaiser,

Risposte:


18

WordPress ha una costante DOING_CRONche ci aiuta a sapere che stiamo facendo i lavori cron o no. È definito nel wp-cron.phpfile.

Quindi, puoi controllare questa costante nel tuo codice:

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

2
A partire da WordPress 4.8.0 wp_doing_cron()può essere utilizzato invece.
Joe,

2

Dai un'occhiata al "Cron API inspector" , che ho scritto per la domanda n . 18017 . Il plugin crea una tabella che mostra l' shutdownhook / la fine della pagina.

Utilizza la _get_cron_array()funzione per recuperare tutte le azioni registrate e programmate. Un'altra utile funzione è wp_get_schedules(). Il terzo metodo consiste nel chiamare direttamente i dati sottostanti _get_cron_array(), chiamando get_option( 'cron' );: è ancora meglio utilizzare le funzioni API predefinite dal core WP.

Se vuoi sapere se sei attualmente all'interno di un Cron Job, puoi controllare defined( 'DOING_CRON' ) AND DOING_CRON.


1

Non sono studi di sviluppo (sono solo un appassionato) ma penso che potresti aggiungere un add_action all'evento

È solo un curriculum ...

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

Per recuperare un elenco del tuo cron "your_function" dove hai questo arg

     //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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.