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ı?
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ı?
Yanıtlar:
WordPress, DOING_CRON
cron işlerini yaptığımızı bilmemize yardımcı olan bir sabite sahiptir . wp-cron.php
Dosyada tanımlanmıştır .
Böylece, bu sabiti kodunuzda kontrol edebilirsiniz:
if ( defined( 'DOING_CRON' ) )
{
// Do something
}
wp_doing_cron()
itibaren kullanılabilir.
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
.
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);