ตรวจสอบว่าฟังก์ชั่นที่เรียกโดยงาน cron


13

ฉันมีฟังก์ชั่นที่ฉันต้องการทำงานผ่าน cron เท่านั้น มีวิธีที่ฉันสามารถตรวจสอบว่าเหตุการณ์ที่กำหนดไว้เฉพาะกำลังเรียกฟังก์ชั่นนี้และไม่ได้มีอะไรอีกหรือไม่?


3
Btw: คุณจะไม่ได้รับเงินคืนหากไม่ได้รับรางวัล ในขณะที่คุณทำเครื่องหมายคำตอบหนึ่งคำตอบไว้เป็นวิธีแก้ปัญหาแล้ว ขอบคุณ
ไกเซอร์

คำตอบ:


18

WordPress มีค่าคงDOING_CRONที่ที่ช่วยให้เรารู้ว่าเราทำงาน cron หรือไม่ มันกำหนดไว้ในwp-cron.phpไฟล์

ดังนั้นคุณสามารถตรวจสอบค่าคงที่นี้ในรหัสของคุณ:

if ( defined( 'DOING_CRON' ) )
{
    // Do something
}

2
ตั้งแต่ WordPress 4.8.0 wp_doing_cron()สามารถใช้แทนได้
Joe

2

เพียงแค่ดูที่ที่» 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ได้


1

ฉันไม่ได้เรียนรู้การพัฒนา (ฉันแค่เป็นคนที่กระตือรือร้น) แต่ฉันคิดว่าคุณอาจเพิ่ม 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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.