2017-11-12 38 views
6

Tôi đang tạo plugin WordPress, khi plugin được kích hoạt, tôi cần một công việc định kỳ để chạy theo lịch 5 phút một lần.wp_schedule_event() trong plugin không lên lịch sự kiện cron

Đây là mã của tôi;

// Register plugin activation hook 
function my_plugin_activate() { 
    if(!wp_next_scheduled('my_function_hook')) { 
     wp_schedule_event(time(), '5', 'my_function_hook'); 
    } 
} 
register_activation_hook(__FILE__, 'my_plugin_activate'); 

// Register plugin deactivation hook 
function my_plugin_deactivate(){ 
    wp_clear_scheduled_hook('my_function_hook'); 
} 
register_deactivation_hook(__FILE__,'my_plugin_deactivate'); 

// Function I want to run when cron event runs 
function my_function(){ 
    //Function code 
} 
add_action('my_function_hook', 'my_function'); 

Khi tôi sử dụng plugin này https://wordpress.org/plugins/wp-crontrol/ để kiểm tra các sự kiện cron, không có gì đã được thêm vào, tôi đang chờ đợi một sự kiện cron được nói thêm rằng chạy 'my_function' lúc 5 khoảng phút, tôi không có lỗi

+2

WordPress cron không giống với cron trên máy chủ. Để nó được chạy, bạn cần phải truy cập trang (bạn hoặc bất kỳ ai khác) nếu không nó sẽ không chạy;) –

Trả lời

5

Xem: wp_schedule_event()

giá trị hợp lệ cho sự tái phát là hàng giờ, hàng ngày, và twicedaily. Chúng có thể được mở rộng bằng cách sử dụng bộ lọc ‘cron_schedules’ trong wp_get_schedules().

Vì vậy, bạn chỉ cần thêm lịch tùy chỉnh chạy sau mỗi 5 phút.

<?php // Requires PHP 5.4+. 

add_filter('cron_schedules', function ($schedules) { 
    $schedules['every-5-minutes'] = array(
     'interval' => 5 * MINUTE_IN_SECONDS, 
     'display' => __('Every 5 minutes') 
    ); 
    return $schedules; 
}); 

if(! wp_next_scheduled('my_function_hook')) { 
    wp_schedule_event(time(), 'every-5-minutes', 'my_function_hook'); 
} 
+0

Tôi biết WordPress cron hoạt động khác nhau - đây là vấn đề, tôi đã thông qua hàm wp_schedule_event() một số thay vì lịch biểu hợp lệ, cảm ơn sự giúp đỡ của bạn – user3574766

0

Như @dingo_d nhận xét, WordPress Cron không hoạt động như máy chủ Cron. Cron WordPress chạy trên tải trang. Nó kiểm tra cơ sở dữ liệu cho một sự kiện đã lên lịch và nếu một sự kiện được lên kế hoạch, nó sẽ chạy nhiệm vụ. Vì vậy, nếu không ai truy cập trang web trong khoảng thời gian 5 phút không có công việc nào sẽ được chạy trong khoảng thời gian đó. Khi ai đó làm truy cập trang web, quy trình tải trang sẽ chạy và sự kiện được lên lịch diễn ra.

Thiết lập như thế này để WordPress hoạt động mà không cần bất kỳ chức năng Cron cụ thể nào trên máy chủ.

Để tránh điều này, bạn có thể sử dụng dịch vụ tự động truy cập trang web của mình hoặc bạn có thể thiết lập tập lệnh Cron trên máy chủ của mình để tự động tải trang.

Giả sử máy chủ Linux bạn ssh vào terminal sau đó viết crontab -e và nhấn enter. Bạn sẽ nhập tệp cron để thiết lập các công việc cron. Thêm vào tệp dòng sau:

/5 * * * wget -q -O - http://yourdomain.com/wp-cron.php?doing_wp_cron 

thay thế http://yourdomain.com cho trang web thực tế của bạn. Điều này đảm bảo rằng trang web của bạn được truy cập sau mỗi 5 phút.

Tôi đã lấy thông tin về cách thực hiện điều này từ https://tommcfarlin.com/wordpress-cron-jobs/ để tín dụng cho anh ta và liên kết đó có nhiều thông tin cron WordPress hơn.

1

WP Cron chạy, khi ai đó truy cập trang web của bạn. Vì vậy nếu không có ai ghé thăm, cron không bao giờ chạy.

Bây giờ có 2 giải pháp:

  1. Disable WP Cron, sử dụng một công việc định kỳ thực và tùy chỉnh nó.

https://support.hostgator.com/articles/specialized-help/technical/wordpress/how-to-replace-wordpress-cron-with-a-real-cron-job

  1. Sử dụng một khoảng thời gian tùy chỉnh trong wp_schedule_event():

    function myprefix_custom_cron_schedule($schedules) { 
        $schedules['every_six_hours'] = array(
         'interval' => 21600, // Every 6 hours 
         'display' => __('Every 6 hours'), 
        ); 
        return $schedules; 
    } 
    add_filter('cron_schedules', 'myprefix_custom_cron_schedule'); 
    
    //Schedule an action if it's not already scheduled 
    if (! wp_next_scheduled('myprefix_cron_hook')) { 
        wp_schedule_event(time(), 'every_six_hours', 'myprefix_cron_hook'); 
    } 
    
    ///Hook into that action that'll fire every six hours 
    add_action('myprefix_cron_hook', 'myprefix_cron_function'); 
    
    //create your function, that runs on cron 
    function myprefix_cron_function() { 
        //your function... 
    } 
    

và bạn có thể thấy những tuts

http://www.nextscripts.com/tutorials/wp-cron-scheduling-tasks-in-wordpress/

http://www.iceablethemes.com/optimize-wordpress-replace-wp_cron-real-cron-job/

http://www.smashingmagazine.com/2013/10/16/schedule-events-using-wordpress-cron/

tùy chỉnh Wp cron

http://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules

http://www.smashingmagazine.com/2013/10/16/schedule-events-using-wordpress-cron/

http://www.viper007bond.com/2011/12/14/how-to-create-custom-wordpress-cron-intervals/

http://www.sitepoint.com/mastering-wordpress-cron/

https://tommcfarlin.com/wordpress-cron-jobs/

http://www.paulund.co.uk/create-cron-jobs-in-wordpress

cron linux

http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

http://www.thesitewizard.com/general/set-cron-job.shtml

http://code.tutsplus.com/tutorials/scheduling-tasks-with-cron-jobs--net-8800

google search

Các vấn đề liên quan