आप cron_schedules के माध्यम से नया शेड्यूल समय बना सकते हैं:
function my_cron_schedules($schedules){
if(!isset($schedules["5min"])){
$schedules["5min"] = array(
'interval' => 5*60,
'display' => __('Once every 5 minutes'));
}
if(!isset($schedules["30min"])){
$schedules["30min"] = array(
'interval' => 30*60,
'display' => __('Once every 30 minutes'));
}
return $schedules;
}
add_filter('cron_schedules','my_cron_schedules');
अब आप अपने कार्य को निर्धारित कर सकते हैं:
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
केवल इसे एक बार शेड्यूल करने के लिए, इसे फंक्शन में लपेटें और इसे चलाने से पहले जांचें:
$args = array(false);
function schedule_my_cron(){
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
}
if(!wp_next_scheduled('my_schedule_hook',$args)){
add_action('init', 'schedule_my_cron');
}
$ Args पैरामीटर पर ध्यान दें! Wp_next_scheduled में $ args पैरामीटर निर्दिष्ट नहीं करते हुए, लेकिन wp_schedule_event के लिए $ args होने से, उसी इवेंट की लगभग अनंत संख्या शेड्यूल हो जाएगी (केवल एक के बजाय)।
अंत में, वास्तविक फ़ंक्शन बनाएं जिसे आप चलाना चाहते हैं:
function my_schedule_hook(){
// codes go here
}
मुझे लगता है कि यह उल्लेख करना महत्वपूर्ण है कि wp-cron शेड्यूल की जाँच कर रहा है और हर बार एक पेज लोड होने के कारण नियत कार्य चल रहा है।
इसलिए, यदि आपके पास एक कम ट्रैफ़िक वेबसाइट है, जिसमें केवल 1 विज़िटर एक घंटा है, तो wp-cron केवल तभी चलेगा जब वह विज़िटर आपकी साइट (एक घंटे में एक बार) ब्राउज़ करता है। यदि आपके पास एक उच्च ट्रैफ़िक साइट है, जो हर सेकंड एक पृष्ठ का अनुरोध करने वाले आगंतुकों के साथ है, तो सर्वर पर अतिरिक्त भार पैदा करने वाले हर सेकंड wp-cron को ट्रिगर किया जाएगा।
समाधान यह है कि आप wp-cron को डीएक्टिवेट करें और एक वास्तविक क्रॉन जॉब के माध्यम से इसे ट्रिगर करें ताकि आपके द्वारा सबसे पहले दोहराए गए अनुसूचित wp-cron जॉब (आपके मामले में 5 मिनट) हो सके।
लुकास रोलफ समस्या की व्याख्या करता है और समाधान को विस्तार से बताता है।
एक विकल्प के रूप में, आप अपनी साइट को क्वेरी करने के लिए UptimeRobot जैसी मुफ्त 3 पार्टी सेवा का उपयोग कर सकते हैं (और wp-cron को ट्रिगर करें), यदि आप wp-cron को निष्क्रिय नहीं करना चाहते हैं और इसे असली cron जॉब के माध्यम से ट्रिगर करना चाहते हैं।