Ejecutando WP Cron en una hora local específica

4

El escenario es ejecutar la función insert_post cada medianoche (00:00) de la hora local. Debe ejecutarse diariamente los días laborables.

function add_daily_task(){
    if((date('l', time()) != 'Saturday') || (date('l', time()) != 'Sunday')){ 
        // insert post
    }
}

if(!wp_next_scheduled( 'add_daily_task_schedule')){
    wp_schedule_event(time(), 'daily', 'add_daily_task_schedule');
    // how should change time() to meet my local schedule?
}

add_action('add_daily_task_schedule', 'add_daily_task'); 
    
pregunta Ivan Slaughter 24.01.2013 - 09:26

3 respuestas

4

wp_schedule_event no se puede usar para mediciones de tiempo PRECISA como usted está tratando de hacer. Un evento programado con wp_schedule_event rara vez se ejecuta exactamente cuando está programado para ejecutarse, se ejecuta en algún momento después de el tiempo para el que se ha configurado.

Para entender esto, debes comprender que php no sabe qué hora es hasta que le pides que busque. Wordpress comprueba el tiempo cada vez que alguien visita su sitio web. Luego compara la hora actual con la hora de cualquier tarea programada. Si el tiempo es igual o mayor (después) que el tiempo programado, ejecuta la tarea.

Por lo tanto, esto significa que incluso si descubres el problema de la programación de tu horario, tu tarea no se ejecutará hasta que haya transcurrido el tiempo que elijas Y alguien cargue tu sitio web.

Habiendo dicho todo esto, si aún desea probar y hacer que esto funcione, esta es una solución posible. Agrega un nuevo intervalo a tus funciones.php

function cron_add_weekly( $schedules ) {
    // Adds once weekly to the existing schedules.
    $schedules['weekly'] = array(
            'interval' => 604800,
            'display' => __( 'Once Weekly' )
    );
    return $schedules;
}

cambia tu función a wp_schedule_event(time(), 'weekly', 'add_daily_task_schedule');

Si implementas esto exactamente a la medianoche del sábado siguiente, Wordpress intentará ejecutar este programa todas las semanas a la misma hora del día (suponiendo que alguien vaya a tu sitio para activar el programa).

    
respondido por el Matt Keys 12.06.2013 - 05:42
0

La función:

time()

proporciona la marca de tiempo de UNIX en la zona horaria de GMT.

Entonces, si eres GMT + 2 puedes usar:

time() + 2*60*60;

o si eres GMT-4 puedes usar:

time() - 4*60*60;

Intenta reemplazar time () con mytime () en tu código, donde:

function mytime(){
    $gmt_offset_in_hours=-2; // for GMT-2 (EDIT this value) 
    return time() + $gmt_offset_in_hours*60*60;     
}
    
respondido por el birgire 08.02.2013 - 03:34
0

No estoy seguro de cuál es la pregunta, pero el uso de time() es incorrecto, ya que en el mejor de los casos le dará la hora local del servidor y no la hora local del sitio, que tiene en cuenta la configuración de zona horaria de WordPress .

La función que debe usar es current_time .

    
respondido por el Mark Kaplun 08.02.2013 - 08:12

Lea otras preguntas en las etiquetas