En primer lugar, defina sus horarios de trabajo cron personalizados.
add_filter('cron_schedules', array($this, 'cron_schedules'));
public function cron_schedules($schedules){
$prefix = 'cron_';// Avoid conflict with other crons. Example Reference: cron_30_mins
$schedule_options = array(
'30_mins' => array(
'display' => '30 Minutes',
'interval' => '1800'
),
'1_hours' => array(
'display' => 'Hour',
'interval' => '3600'
),
'2_hours' => array(
'display' => '2 Hours',
'interval' => '7200'
)
);
/* Add each custom schedule into the cron job system. */
foreach($schedule_options as $schedule_key => $schedule){
$schedules[$prefix.$schedule_key] = array(
'interval' => $schedule['interval'],
'display' => __('Every '.$schedule['display'])
);
}
return $schedules;
}
Debe decidir dónde y cuándo programar realmente el evento.
Aquí hay solo un fragmento de código de ejemplo, que realiza una llamada a un método de clase personalizado:
$schedule = $this->schedule_task(array(
'timestamp' => current_time('timestamp'), // Determine when to schedule the task.
'recurrence' => 'cron_30_mins',// Pick one of the schedules set earlier.
'hook' => 'custom_imap_import'// Set the name of your cron task.
));
Aquí está el código que realmente programa el evento:
private function schedule_task($task){
/* Must have task information. */
if(!$task){
return false;
}
/* Set list of required task keys. */
$required_keys = array(
'timestamp',
'recurrence',
'hook'
);
/* Verify the necessary task information exists. */
$missing_keys = array();
foreach($required_keys as $key){
if(!array_key_exists($key, $task)){
$missing_keys[] = $key;
}
}
/* Check for missing keys. */
if(!empty($missing_keys)){
return false;
}
/* Task must not already be scheduled. */
if(wp_next_scheduled($task['hook'])){
wp_clear_scheduled_hook($task['hook']);
}
/* Schedule the task to run. */
wp_schedule_event($task['timestamp'], $task['recurrence'], $task['hook']);
return true;
}
Ahora, todo lo que necesita hacer es llamar al nombre de su tarea cron personalizada. En este ejemplo, el nombre de la tarea cron es custom_imap_import
.
add_action('custom_imap_import', array($this, 'do_imap_import'));
public function do_imap_import(){
// .... Do stuff when cron is fired ....
}
Entonces, en este ejemplo, $this->do_imap_import();
se llama cada 30 minutos (suponiendo que tenga suficiente tráfico a su sitio web).
Notas
Requiere una visita a la página para que su cron se active en los momentos correctos.
Ejemplo: si programó una tarea a intervalos de 30 minutos, pero nadie visita su sitio durante 4 horas, su trabajo cron no será despedido hasta que ese visitante llegue a su sitio 4 horas más tarde. Si realmente necesita que su tarea sea disparada cada 30 minutos, se recomienda configurar un trabajo cron legítimo a través de su proveedor de alojamiento web para visitar su sitio web en los intervalos deseados.
¡Los trabajos cron de WordPress no hacen que su sitio web sea lento!
Tal vez esté pensando que si el cron-script tarda mucho en ejecutarse, los visitantes tendrán que esperar hasta que se ejecute el script. No! ¿Cómo puede ser eso posible? Si miras el wp-cron.php
archivo encontrarás una línea
ignore_user_abort(true);
Es una php.ini
configuración que establece que si deja de cargar el sitio / script, el script no dejará de ejecutarse.
Si observa el wp-includes/cron.php
archivo, encontrará una línea como esta:
wp_remote_post( $cron_url,
array('timeout' => 0.01,
'blocking' => false,
'sslverify' => apply_filters('https_local_ssl_verify', true)) );
Eso significa WordPress esperará solamente 0,01 segundos para activar la ejecución luego se abortará pero como se ha definido ignore_user_abort
para true
el guión será de ejecución. Esta funcionalidad es una gran ventaja para ejecutar scripts grandes en trabajos cron de WordPress.
Funciones disponibles para ayuda:
schedule_event( $_SESSION['insert_id'] );
despide?schedule_event( )
, digamos, en la parte superior del archivo incluido cargado por el shortcode.