Wp_Schedule_Event cada día a una hora específica

27 feb 2015, 23:24:55
Vistas: 72K
Votos: 13

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');
}
1
Comentarios

La función time() no toma un argumento de entrada, prueba con la función strtotime() o la función strftime() en su lugar, para crear marcas de tiempo personalizadas a partir de una cadena. Pero si ya tienes la marca de tiempo, no las necesitas.

birgire birgire
28 feb 2015 01:06:52
Todas las respuestas a la pregunta 4
0
32

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' );
31 ago 2015 12:31:30
0
31

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:

  1. Deshabilitar WP Cron, usar un cron job real y personalizarlo.

https://support.hostgator.com/articles/specialized-help/technical/wordpress/how-to-replace-wordpress-cron-with-a-real-cron-job

  1. 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

buscar en Google

28 feb 2015 22:24:07
1

Bueno, 1427488800 se traduce al 27 de marzo de 2015, por lo que tu evento ni siquiera está programado para comenzar todavía.

Además, ten en cuenta que los eventos programados en WordPress solo se activarán si alguien visita el sitio en ese momento.

28 feb 2015 00:20:40
Comentarios

Ahora, ¿cómo solucionarlo? @vancoder

Mortzea Mortzea
28 feb 2015 11:10:27
0

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');
}
5 abr 2018 10:00:15