Wp_Schedule_Event cada día a una hora específica
Escribí el siguiente código para ejecutar mi función todos los días a las 16:20..
Pero creo que hay un problema en el código..
no está funcionando
Timestamp Epoch: 1427488800
28/3/2015 1:10:00 AM
if( !wp_next_scheduled( 'import_into_db' ) ) {
wp_schedule_event( time('1427488800'), 'daily', 'import_into_db' );
function import_into_db(){
////Mi código
}
add_action('wp', 'import_into_db');
}

En lugar de time(), utiliza la función strtotime() para que puedas especificar la hora del día - usará la fecha de hoy con la hora que indiques. Así que en tu caso:
strtotime('16:20:00'); // 4:20 PM
El uso en la función wp_schedule_event
se vería así:
wp_schedule_event( strtotime('16:20:00'), 'daily', 'import_into_db' );

WP Cron se ejecuta cuando alguien visita tu sitio web. Por lo tanto, si nadie visita, el cron nunca se ejecuta.
Ahora hay 2 soluciones:
- Deshabilitar WP Cron, usar un cron job real y personalizarlo.
Usar un intervalo personalizado en
wp_schedule_event()
:function myprefix_custom_cron_schedule( $schedules ) { $schedules['every_six_hours'] = array( 'interval' => 21600, // Cada 6 horas 'display' => __( 'Cada 6 horas' ), ); return $schedules; } add_filter( 'cron_schedules', 'myprefix_custom_cron_schedule' ); // Programa una acción si aún no está programada if ( ! wp_next_scheduled( 'myprefix_cron_hook' ) ) { wp_schedule_event( time(), 'every_six_hours', 'myprefix_cron_hook' ); } // Conecta la acción que se ejecutará cada seis horas add_action( 'myprefix_cron_hook', 'myprefix_cron_function' ); // Crea tu función que se ejecutará en el cron function myprefix_cron_function() { // tu función... }
Y puedes ver estos tutoriales:
http://www.nextscripts.com/tutorials/wp-cron-scheduling-tasks-in-wordpress/
http://www.iceablethemes.com/optimize-wordpress-replace-wp_cron-real-cron-job/
http://www.smashingmagazine.com/2013/10/16/schedule-events-using-wordpress-cron/
Cron personalizado en WP:
http://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules
http://www.smashingmagazine.com/2013/10/16/schedule-events-using-wordpress-cron/
http://www.viper007bond.com/2011/12/14/how-to-create-custom-wordpress-cron-intervals/
http://www.sitepoint.com/mastering-wordpress-cron/
https://tommcfarlin.com/wordpress-cron-jobs/
http://www.paulund.co.uk/create-cron-jobs-in-wordpress
Cron en Linux:
http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/
http://www.thesitewizard.com/general/set-cron-job.shtml
http://code.tutsplus.com/tutorials/scheduling-tasks-with-cron-jobs--net-8800

Este código está funcionando para mí, creo que está más cerca de la pregunta original. Lo que quieres es obtener el tiempo UNIX + zona horaria para cuando deseas que se ejecute. Una vez que el cron se ejecuta y es eliminado de WP, se recrea a sí mismo en el momento que especifiques.
En el siguiente ejemplo, lo tengo funcionando para AEST (GMT+10) a las 6AM cada mañana. Así que lo estoy programando para GMT 20:00 cada día.
if (!wp_next_scheduled('cron_name')) {
$time = strtotime('today'); //devuelve la medianoche de hoy
$time = $time + 72000; //agrega un desplazamiento para la hora del día que quieres, teniendo en cuenta que esto está en GMT.
wp_schedule_event($time, 'daily', 'cron_name');
}
