¿Cómo probar wp_cron?

11 abr 2011, 00:27:26
Vistas: 23K
Votos: 29

Esta es una pregunta un poco tonta...

Programé una acción para ejecutarse cada hora:

if(!wp_next_scheduled('my_hourly_events'))
  wp_schedule_event(time(), 'hourly', 'my_hourly_events');

add_action('my_hourly_events', 'the_function_to_run');

function the_function_to_run(){
   echo '¡funciona!'; 
}

¿Cómo puedo probar si esto funciona sin esperar una hora? :)

Intenté agregar wp_clear_scheduled_hook('my_hourly_events'); antes de este código y agregar wp_cron() después, pero no veo que mi función se ejecute...

edición:

ok, agregué un trigger_error() dentro de mi función, revisé el registro de errores de apache, ¡y ahí está! :)

Ahora estoy aún más confundido:

  • ¿Cómo puede ejecutarse wp-cron en segundo plano? porque aparentemente eso es lo que sucede si no veo ninguna salida...

  • esto no parece funcionar en un contexto de objeto; ¿por qué?

3
Comentarios

ok descubrí que wp-cron.php se está ejecutando con wp_remote_post(). eso lo explica todo...

onetrickpony onetrickpony
11 abr 2011 02:33:18

Cuando dices "contexto de objeto", ¿te refieres a que tu callback es algo como array( &$this, 'my_method_name' )? Efectivamente no funcionará porque el nombre de la función se almacena en la base de datos para ejecutarse después. &$this hace referencia a un objeto específico, no a un nombre de clase, y este objeto no existirá en la siguiente solicitud cuando se ejecute el cron. Una función estática de clase debería funcionar.

Jan Fabry Jan Fabry
11 abr 2011 12:34:30

sí, tuve que hacer mi función estática. No pensé que wp ejecutaría remotamente un script local como "cron"

onetrickpony onetrickpony
11 abr 2011 20:05:12
Todas las respuestas a la pregunta 2
2
22

Mi plugin favorito para eso es Core Control, que tiene un módulo muy útil para mostrar lo que está ocurriendo en el cron: qué eventos están configurados, cuándo se ejecutarán próximamente, etc.

Para un nivel más técnico y práctico, revisa _get_cron_array(), que devuelve los datos internos almacenados de los eventos cron (las claves principales son marcas de tiempo).

11 abr 2011 08:37:26
Comentarios

¿el HTTP Access Logger registra todas las solicitudes o solo las realizadas con la API HTTP de WP? Esto es genial para encontrar las solicitudes que hacen los plugins y por qué tu página carga lento :)

onetrickpony onetrickpony
11 abr 2011 20:12:30

@One Trick Pony no estoy seguro, pero tendría sentido asumir que es solo de la API

Rarst Rarst
11 abr 2011 20:27:14
0

wp-cli es otra opción:

Listar Eventos

> wp cron event list
+-------------------+---------------------+-----------------------+---------------+
| hook              | next_run_gmt        | next_run_relative     | recurrence    |
+-------------------+---------------------+-----------------------+---------------+
| wp_update_plugins | 2020-04-14 08:11:38 | 7 horas 24 minutos    | 12 horas      |
| wp_update_themes  | 2020-04-14 08:11:38 | 7 horas 24 minutos    | 12 horas      |
| wcsc_prime_sites  | 2020-04-14 17:00:55 | 16 horas 13 minutos   | 1 día         |
+-------------------+---------------------+-----------------------+---------------+

Programar un Evento

> wp cron event schedule wp_update_plugins "now +5 seconds"
Éxito: Evento programado con el hook 'wp_update_plugins' para 2020-04-14 00:43:54 GMT.

Luego puedes visitar el front-end del sitio y actualizar un par de veces para asegurarte de que se active. Después ejecuta list nuevamente para ver que ya no está programado.

Ejecutar Directamente en Terminal

> wp cron event run wcsc_prime_sites
Ejecutado el evento cron 'wcsc_prime_sites' en 0.805s.
Éxito: Se ejecutó un total de 1 evento cron.

Una peculiaridad a tener en cuenta es que wp-cli se ejecuta en el contexto de wp-admin, pero WP Cron se ejecuta en el front end. Normalmente eso no es un problema, pero cuando estés escribiendo trabajos, asegúrate de require() cualquier archivo de wp-admin/includes que tu código espere que esté cargado.

Si no lo haces, el trabajo funcionará bien en wp-cli, pero producirá un error fatal cuando se ejecute normalmente.

Otros comandos

Ejecuta wp help cron para más detalles.

14 abr 2020 03:59:10