У меня есть функция, которую я хочу запустить только через задание cron. Есть ли способ, которым я могу проверить, что определенное запланированное событие вызывает эту функцию, а не что-нибудь еще?
Кстати: вы не получите награду, если не будете вознаграждены. Поскольку вы уже отметили один ответ как решение, также предоставьте пользователю вознаграждение. Благодарю.
Кайзер
Ответы:
18
В WordPress есть константа, DOING_CRONкоторая помогает нам знать, выполняем ли мы задачи cron или нет. Это определено в wp-cron.phpфайле.
Итак, вы можете проверить эту константу в своем коде:
Начиная с WordPress 4.8.0 wp_doing_cron()можно использовать вместо.
Джо
2
Достаточно взглянуть на « Инспектор API Cron» , который я написал для вопроса № 18017 . Плагин строит таблицу, которая отображается в shutdown-hook / конце страницы.
Он использует _get_cron_array()функцию для извлечения всех зарегистрированных и запланированных действий. Еще одна полезная функция wp_get_schedules(). Третий способ - _get_cron_array()непосредственный вызов базовых данных путем вызова get_option( 'cron' );- все же лучше использовать функции API по умолчанию из ядра WP.
Если вы хотите знать, находитесь ли вы в Cron Job, вы можете проверить defined( 'DOING_CRON' ) AND DOING_CRON.
Я не изучаю развитие (я просто энтузиаст), но я думаю, что вы можете добавить add_action к событию
Это просто резюме ...
//to the eventif(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;}elseif(is_array($hooks)&& is_array($args)&& $filter){return $filter;}elseif($hooks ==='schedule'&& $args ===false&& $schedule){return $schedule;}elseif($hooks ===false&& $args ===false&& $crons){return $crons;}else{returnfalse;}}//Usage
$cron_filtered = kw_filter_crons_hooks(array('your_function'), array('param_1'=>value));
var_dump($cron_filtered);
Ответы:
В WordPress есть константа,
DOING_CRON
которая помогает нам знать, выполняем ли мы задачи cron или нет. Это определено вwp-cron.php
файле.Итак, вы можете проверить эту константу в своем коде:
источник
wp_doing_cron()
можно использовать вместо.Достаточно взглянуть на « Инспектор API Cron» , который я написал для вопроса № 18017 . Плагин строит таблицу, которая отображается в
shutdown
-hook / конце страницы.Он использует
_get_cron_array()
функцию для извлечения всех зарегистрированных и запланированных действий. Еще одна полезная функцияwp_get_schedules()
. Третий способ -_get_cron_array()
непосредственный вызов базовых данных путем вызоваget_option( 'cron' );
- все же лучше использовать функции API по умолчанию из ядра WP.Если вы хотите знать, находитесь ли вы в Cron Job, вы можете проверить
defined( 'DOING_CRON' ) AND DOING_CRON
.источник
Я не изучаю развитие (я просто энтузиаст), но я думаю, что вы можете добавить add_action к событию
Это просто резюме ...
Чтобы получить список ваших cron "your_function", где есть этот аргумент
источник