Compruebe si la función llamada por el trabajo cron
13
Tengo una función que solo quiero ejecutar a través de un trabajo cron. ¿Hay alguna forma de verificar que un evento programado en particular llame a esta función y no a otra cosa?
Por cierto: no obtienes recompensa si no eres recompensado. Como ya has marcado una respuesta como solución, también dale al usuario la recompensa. Gracias.
kaiser
Respuestas:
18
WordPress tiene una constante DOING_CRONque nos ayuda a saber que estamos haciendo los trabajos cron o no. Está definido en el wp-cron.phparchivo.
Entonces, puede verificar esta constante en su código:
A partir de WordPress 4.8.0 wp_doing_cron()se puede utilizar en su lugar.
Joe
2
Solo eche un vistazo al »inspector de API de Cron« , que escribí para la pregunta # 18017 . El complemento crea una tabla que se muestra en el shutdowngancho / al final de la página.
Utiliza la _get_cron_array()función para recuperar todas las acciones registradas y programadas. Otra función útil es wp_get_schedules(). La tercera forma es llamar _get_cron_array()directamente a los datos subyacentes , llamando get_option( 'cron' );: aún es mejor usar las funciones API predeterminadas del núcleo de WP.
Si desea saber si actualmente se encuentra dentro de un trabajo Cron, puede verificarlo defined( 'DOING_CRON' ) AND DOING_CRON.
No estoy estudiando desarrollo (solo soy un entusiasta) pero creo que puedes agregar una acción adicional al evento
Es solo un currículum ...
//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}}
Para recuperar una lista de su cron "su_función" donde tiene este argumento
//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);
Respuestas:
WordPress tiene una constante
DOING_CRON
que nos ayuda a saber que estamos haciendo los trabajos cron o no. Está definido en elwp-cron.php
archivo.Entonces, puede verificar esta constante en su código:
fuente
wp_doing_cron()
se puede utilizar en su lugar.Solo eche un vistazo al »inspector de API de Cron« , que escribí para la pregunta # 18017 . El complemento crea una tabla que se muestra en el
shutdown
gancho / al final de la página.Utiliza la
_get_cron_array()
función para recuperar todas las acciones registradas y programadas. Otra función útil eswp_get_schedules()
. La tercera forma es llamar_get_cron_array()
directamente a los datos subyacentes , llamandoget_option( 'cron' );
: aún es mejor usar las funciones API predeterminadas del núcleo de WP.Si desea saber si actualmente se encuentra dentro de un trabajo Cron, puede verificarlo
defined( 'DOING_CRON' ) AND DOING_CRON
.fuente
No estoy estudiando desarrollo (solo soy un entusiasta) pero creo que puedes agregar una acción adicional al evento
Es solo un currículum ...
Para recuperar una lista de su cron "su_función" donde tiene este argumento
fuente