Kiểm tra nếu chức năng được gọi bởi cron job


12

Tôi có một chức năng mà tôi chỉ muốn chạy thông qua một công việc định kỳ. Có cách nào để tôi có thể kiểm tra xem một sự kiện theo lịch trình cụ thể đang gọi chức năng này chứ không phải bất cứ điều gì khác không?


3
Btw: Bạn không nhận lại tiền thưởng nếu không được thưởng. Vì bạn đã đánh dấu một câu trả lời là giải pháp, vui lòng cung cấp cho người dùng tiền thưởng. Cảm ơn.
kaiser

Câu trả lời:


17

WordPress có một hằng số DOING_CRONgiúp chúng ta biết chúng ta có đang thực hiện các công việc định kỳ hay không. Nó được định nghĩa trong wp-cron.phptập tin.

Vì vậy, bạn có thể kiểm tra hằng số này trong mã của mình:

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

2
Kể từ WordPress 4.8.0 wp_doing_cron()có thể được sử dụng thay thế.
Joe

2

Chỉ cần xem qua »Trình kiểm tra API Cron« , mà tôi đã viết cho câu hỏi # 18017 . Plugin xây dựng một bảng hiển thị trên shutdown-hook / cuối trang.

Nó sử dụng _get_cron_array()chức năng để lấy tất cả các hành động đã đăng ký và theo lịch trình. Một chức năng hữu ích khác là wp_get_schedules(). Cách thứ ba là gọi _get_cron_array()trực tiếp dữ liệu cơ bản bằng cách gọi get_option( 'cron' );- tốt hơn hết là sử dụng các hàm API mặc định từ lõi WP.

Nếu bạn muốn biết nếu bạn hiện đang ở trong Công việc Cron, thì bạn có thể kiểm tra defined( 'DOING_CRON' ) AND DOING_CRON.


1

Tôi không nghiên cứu về phát triển (Tôi chỉ là một người đam mê) nhưng tôi nghĩ bạn có thể thêm add_action vào sự kiện

Nó chỉ là một bản lý lịch ...

//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
   }
}

Để lấy danh sách cron "your_factor" của bạn, nơi có đối số này

     //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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.