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?
Btw: Anda tidak mendapatkan hadiah kembali jika tidak diberi hadiah. Karena Anda telah menandai satu jawaban sebagai solusi, tolong beri juga hadiah kepada pengguna. Terima kasih.
kaiser
Jawaban:
17
WordPress memiliki konstanta DOING_CRONyang membantu kita mengetahui bahwa kita sedang melakukan tugas cron atau tidak. Itu didefinisikan dalam wp-cron.phpfile.
Jadi, Anda dapat memeriksa konstanta ini dalam kode Anda:
Pada WordPress 4.8.0 wp_doing_cron()dapat digunakan sebagai gantinya.
Joe
2
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 eventif(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;}elseif(is_array($hooks)&& is_array($args)&& $filter){return $filter;}elseif($hooks ==='schedule'&& $args ===false&& $schedule){return $schedule;}elseif($hooks ===false&& $args ===false&& $crons){return $crons;}else{returnfalse;}}//Usage
$cron_filtered = kw_filter_crons_hooks(array('your_function'), array('param_1'=> value));
var_dump($cron_filtered);
Jawaban:
WordPress memiliki konstanta
DOING_CRON
yang membantu kita mengetahui bahwa kita sedang melakukan tugas cron atau tidak. Itu didefinisikan dalamwp-cron.php
file.Jadi, Anda dapat memeriksa konstanta ini dalam kode Anda:
sumber
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 adalahwp_get_schedules()
. Cara ketiga adalah memanggil data yang mendasarinya_get_cron_array()
secara langsung, dengan meneleponget_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
.sumber
Saya tidak mempelajari pengembangan (Saya hanya penggemar) tetapi saya pikir Anda dapat menambahkan add_action ke acara tersebut
Itu hanya resume ...
Untuk mengambil daftar cron Anda "fungsi_Anda" di mana ada argumen ini
sumber