मेरे पास एक फ़ंक्शन है जिसे मैं केवल क्रॉन जॉब के माध्यम से चलाना चाहता हूं। क्या कोई ऐसा तरीका है जो मैं जांच सकता हूं कि एक विशेष अनुसूचित घटना इस फ़ंक्शन को बुला रही है और कुछ नहीं?
मेरे पास एक फ़ंक्शन है जिसे मैं केवल क्रॉन जॉब के माध्यम से चलाना चाहता हूं। क्या कोई ऐसा तरीका है जो मैं जांच सकता हूं कि एक विशेष अनुसूचित घटना इस फ़ंक्शन को बुला रही है और कुछ नहीं?
जवाबों:
वर्डप्रेस में एक स्थिरांक है DOING_CRON
जो हमें यह जानने में मदद करता है कि हम क्रोन जॉब्स कर रहे हैं या नहीं। यह wp-cron.php
फ़ाइल में परिभाषित है ।
तो, आप अपने कोड में इस स्थिरांक की जांच कर सकते हैं:
if ( defined( 'DOING_CRON' ) )
{
// Do something
}
wp_doing_cron()
बजाय इस्तेमाल किया जा सकता है।
बस "क्रोन एपीआई इंस्पेक्टर" पर एक नज़र डालें , जो मैंने प्रश्न # 18017 के लिए लिखा था । प्लगइन एक तालिका बनाता है shutdown
जो पृष्ठ के -hook / समाप्ति पर दिखाता है ।
यह _get_cron_array()
सभी पंजीकृत और अनुसूचित क्रियाओं को पुनः प्राप्त करने के लिए फ़ंक्शन का उपयोग करता है । एक और उपयोगी कार्य है wp_get_schedules()
। तीसरा तरीका अंतर्निहित डेटा को _get_cron_array()
सीधे कॉल करके कह रहा है get_option( 'cron' );
- WP कोर से डिफ़ॉल्ट एपीआई फ़ंक्शन का उपयोग करना अभी भी बेहतर है।
यदि आप जानना चाहते हैं कि क्या आप वर्तमान में क्रोन जॉब के अंदर हैं, तो आप जांच कर सकते हैं 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
}
}
अपने क्रोन "your_function" की सूची प्राप्त करने के लिए जहां यह arg है
//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);