Wp_Schedule_Event todos los días a una hora específica

9

Escribo el siguiente código para ejecutar mi función todos los días a las 16:20 ..

Pero supongo que es el problema en el código ...

no funciona

Marca de tiempo de la época: 1427488800

28/03/2015 1:10:00 a.m.

if( !wp_next_scheduled( 'import_into_db' ) ) {
wp_schedule_event( time('1427488800'), 'daily', 'import_into_db' );

function import_into_db(){

////My code

}
add_action('wp', 'import_into_db');
}
Mortzea
fuente
1
La time()función no toma un argumento de entrada, prueba la strtotime()función o la strftime()función en su lugar, para crear marcas de tiempo personalizadas a partir de una cadena. Pero si ya tiene la marca de tiempo, no los necesita.
Birgire

Respuestas:

18

WP Cron se ejecuta cuando alguien visita su sitio web. Por lo tanto, si nadie visita, el cron nunca se ejecuta.

Ahora hay 2 soluciones:

  1. Deshabilite WP Cron, use un trabajo cron real y personalícelo.

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

  1. Use un intervalo personalizado en wp_schedule_event():

    function myprefix_custom_cron_schedule( $schedules ) {
        $schedules['every_six_hours'] = array(
            'interval' => 21600, // Every 6 hours
            'display'  => __( 'Every 6 hours' ),
        );
        return $schedules;
    }
    add_filter( 'cron_schedules', 'myprefix_custom_cron_schedule' );
    
    //Schedule an action if it's not already scheduled
    if ( ! wp_next_scheduled( 'myprefix_cron_hook' ) ) {
        wp_schedule_event( time(), 'every_six_hours', 'myprefix_cron_hook' );
    }
    
    ///Hook into that action that'll fire every six hours
     add_action( 'myprefix_cron_hook', 'myprefix_cron_function' );
    
    //create your function, that runs on cron
    function myprefix_cron_function() {
        //your function...
    }

y puedes ver estos tuts

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 Wp personalizado

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

búsqueda de Google

amir rasabeh
fuente
12

En lugar de time () , use la función strtotime () para que pueda especificar la hora del día; usará la fecha de hoy con la hora que especifique. Entonces en tu caso:

strtotime('16:20:00'); // 4:20 PM

El uso en la wp_schedule_eventfunción se vería así:

wp_schedule_event( strtotime('16:20:00'), 'daily', 'import_into_db' );
Goran Jakovljevic
fuente
2

Bueno, 1427488800 se resuelve hasta el 27 de marzo de 2015, por lo que su evento aún no está configurado para comenzar.

Además, tenga en cuenta que los eventos de WP programados solo se dispararán si alguien visita el sitio en ese momento.

Vancoder
fuente
Ahora, ¿Cómo arreglarlo? @vancoder
Mortzea
0

Este código me funciona, creo que está más cerca de la pregunta original. Desea obtener el tiempo UNIX + zona horaria para cuando desea que se ejecute. Una vez que el cron se ejecuta y se elimina de WP, se recrea en el momento que especifique.

En el siguiente ejemplo, lo tengo trabajando para AEST (GMT + 10) @ 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'); //returns today midnight
    $time = $time + 72000; //add an offset for the time of day you want, keeping in mind this is in GMT.
    wp_schedule_event($time, 'daily', 'cron_name');
}
Rob P
fuente