ฉันมีฟังก์ชั่นที่ฉันต้องการทำงานผ่าน cron เท่านั้น มีวิธีที่ฉันสามารถตรวจสอบว่าเหตุการณ์ที่กำหนดไว้เฉพาะกำลังเรียกฟังก์ชั่นนี้และไม่ได้มีอะไรอีกหรือไม่?
ฉันมีฟังก์ชั่นที่ฉันต้องการทำงานผ่าน cron เท่านั้น มีวิธีที่ฉันสามารถตรวจสอบว่าเหตุการณ์ที่กำหนดไว้เฉพาะกำลังเรียกฟังก์ชั่นนี้และไม่ได้มีอะไรอีกหรือไม่?
คำตอบ:
WordPress มีค่าคงDOING_CRON
ที่ที่ช่วยให้เรารู้ว่าเราทำงาน cron หรือไม่ มันกำหนดไว้ในwp-cron.php
ไฟล์
ดังนั้นคุณสามารถตรวจสอบค่าคงที่นี้ในรหัสของคุณ:
if ( defined( 'DOING_CRON' ) )
{
// Do something
}
wp_doing_cron()
สามารถใช้แทนได้
เพียงแค่ดูที่ที่» Cron API สารวัตร«ที่ฉันเขียนคำถาม # ปลั๊กอินสร้างตารางที่แสดงบนshutdown
-hook / ท้ายของหน้า
มันใช้_get_cron_array()
ฟังก์ชั่นเพื่อดึงการกระทำที่ลงทะเบียนและกำหนดไว้ทั้งหมด wp_get_schedules()
อีกฟังก์ชันที่มีประโยชน์คือ วิธีที่สามคือการเรียกข้อมูลพื้นฐาน_get_cron_array()
โดยตรงโดยการเรียกget_option( 'cron' );
- มันยังดีกว่าที่จะใช้ฟังก์ชั่น API เริ่มต้นจาก WP core
หากคุณต้องการทราบว่าคุณอยู่ใน Cron Job หรือไม่คุณสามารถตรวจสอบdefined( 'DOING_CRON' ) AND DOING_CRON
ได้
ฉันไม่ได้เรียนรู้การพัฒนา (ฉันแค่เป็นคนที่กระตือรือร้น) แต่ฉันคิดว่าคุณอาจเพิ่ม add_action ให้กับกิจกรรม
มันเป็นเพียงประวัติย่อ ...
//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
}
}
ในการเรียกรายการ cron ของคุณ "your_function" ที่มีอาร์กิวเมนต์นี้
//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);