Saya memiliki fungsi yang hanya ingin saya jalankan melalui cron job. Apakah ada cara saya dapat memeriksa bahwa acara terjadwal tertentu memanggil fungsi ini dan bukan yang lain?
Saya memiliki fungsi yang hanya ingin saya jalankan melalui cron job. Apakah ada cara saya dapat memeriksa bahwa acara terjadwal tertentu memanggil fungsi ini dan bukan yang lain?
Jawaban:
WordPress memiliki konstanta DOING_CRON
yang membantu kita mengetahui bahwa kita sedang melakukan tugas cron atau tidak. Itu didefinisikan dalam wp-cron.php
file.
Jadi, Anda dapat memeriksa konstanta ini dalam kode Anda:
if ( defined( 'DOING_CRON' ) )
{
// Do something
}
wp_doing_cron()
dapat digunakan sebagai gantinya.
Lihat saja »Inspektur Cron API« , yang saya tulis untuk pertanyaan # 18017 . Plugin membangun tabel yang menunjukkan pada shutdown
-hook / akhir halaman.
Ini menggunakan _get_cron_array()
fungsi untuk mengambil semua tindakan yang terdaftar & dijadwalkan. Fungsi lain yang bermanfaat adalah wp_get_schedules()
. Cara ketiga adalah memanggil data yang mendasarinya _get_cron_array()
secara langsung, dengan menelepon get_option( 'cron' );
- masih lebih baik menggunakan fungsi API default dari WP core.
Jika Anda ingin tahu apakah Anda saat ini berada di dalam Cron Job, maka Anda dapat memeriksanya defined( 'DOING_CRON' ) AND DOING_CRON
.
Saya tidak mempelajari pengembangan (Saya hanya penggemar) tetapi saya pikir Anda dapat menambahkan add_action ke acara tersebut
Itu hanya resume ...
//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
}
}
Untuk mengambil daftar cron Anda "fungsi_Anda" di mana ada argumen ini
//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);