Eu tenho uma função que eu só quero executar através de um trabalho cron. Existe uma maneira de verificar se um determinado evento agendado está chamando essa função e não qualquer outra coisa?
Eu tenho uma função que eu só quero executar através de um trabalho cron. Existe uma maneira de verificar se um determinado evento agendado está chamando essa função e não qualquer outra coisa?
Respostas:
WordPress tem uma constante DOING_CRON
que nos ajuda a saber que estamos fazendo os trabalhos cron ou não. Está definido no wp-cron.php
arquivo.
Portanto, você pode verificar essa constante no seu código:
if ( defined( 'DOING_CRON' ) )
{
// Do something
}
wp_doing_cron()
pode ser usado.
Basta dar uma olhada no »Cron API inspector« , que escrevi para a pergunta # 18017 . O plug-in cria uma tabela que é mostrada no shutdown
gancho / no final da página.
Ele usa a _get_cron_array()
função para recuperar todas as ações registradas e agendadas. Outra função útil é wp_get_schedules()
. A terceira maneira é chamar _get_cron_array()
diretamente os dados subjacentes , 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 em um Cron Job, pode verificar defined( 'DOING_CRON' ) AND DOING_CRON
.
Não estou estudando desenvolvimento (sou apenas um entusiasta), mas acho que você pode adicionar um add_action ao evento
É apenas um currículo ...
//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 "sua_função", onde está este argumento
//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);