Verifique se a função chamada pelo cron job

10

Eu tenho uma função que só quero executar por meio de um cron job. Existe uma maneira eu posso verificar que um determinado evento agendado está chamando essa função e não qualquer outra coisa?

    
por urok93 05.09.2012 / 11:33

3 respostas

14

O WordPress tem uma constante DOING_CRON que nos ajuda a saber se estamos fazendo os trabalhos agendados ou não. Está definido no arquivo wp-cron.php .

Então, você pode verificar essa constante no seu código:

if ( defined( 'DOING_CRON' ) )
{
    // Do something
}
    
por Anh Tran 07.09.2012 / 17:20
2

Basta dar uma olhada no »inspetor da API Cron« , que escrevi para question # 18017 . O plug-in cria uma tabela que mostra o shutdown -hook / o final da página.

Ele usa a função _get_cron_array() para recuperar todos os registros & ações agendadas. Outra função útil é wp_get_schedules() . A terceira maneira é chamar os dados subjacentes para _get_cron_array() diretamente, chamando get_option( 'cron' ); - ainda é melhor usar as funções padrão da API do núcleo do WP.

Se você deseja saber se está atualmente dentro de um Cron Job, pode verificar defined( 'DOING_CRON' ) AND DOING_CRON .

    
por kaiser 07.09.2012 / 17:01
1

Eu não sou desenvolvimento de estudos (sou apenas um entusiasta) mas acho que você pode adicionar um add_action ao evento

É só um resumo ...

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

Para recuperar uma lista do seu cron "your_function" onde tem este 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);
    
por MonkeyTime 08.09.2012 / 16:42

Tags