Wp_Schedule_Event ogni giorno ad un orario specifico

27 feb 2015, 23:24:55
Visualizzazioni: 72K
Voti: 13

Ho scritto il seguente codice per eseguire la mia funzione ogni giorno alle 16:20..

Ma credo ci sia un problema nel codice..

non funziona

Timestamp Epoch: 1427488800

28/3/2015 1:10:00

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

function import_into_db(){

////Il mio codice

}
add_action('wp', 'import_into_db');
}
1
Commenti

La funzione time() non accetta un argomento di input, prova invece la funzione strtotime() o la funzione strftime() per creare timestamp personalizzati da una stringa. Ma se hai già il timestamp, non ne hai bisogno.

birgire birgire
28 feb 2015 01:06:52
Tutte le risposte alla domanda 4
0
32

Invece di time(), utilizza la funzione strtotime() così puoi specificare l'orario del giorno - utilizzerà la data odierna con l'orario che specifichi. Quindi nel tuo caso:

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

L'utilizzo nella funzione wp_schedule_event sarebbe così:

wp_schedule_event( strtotime('16:20:00'), 'daily', 'import_into_db' );
31 ago 2015 12:31:30
0
31

WP Cron viene eseguito quando qualcuno visita il tuo sito web. Quindi, se nessuno visita il sito, il cron non verrà mai eseguito.

Ora ci sono 2 soluzioni:

  1. Disabilita WP Cron, usa un vero cron job e personalizzalo.

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

  1. Usa un intervallo personalizzato in wp_schedule_event():

    function myprefix_custom_cron_schedule( $schedules ) {
        $schedules['every_six_hours'] = array(
            'interval' => 21600, // Ogni 6 ore
            'display'  => __( 'Ogni 6 ore' ),
        );
        return $schedules;
    }
    add_filter( 'cron_schedules', 'myprefix_custom_cron_schedule' );
    
    // Pianifica un'azione se non è già pianificata
    if ( ! wp_next_scheduled( 'myprefix_cron_hook' ) ) {
        wp_schedule_event( time(), 'every_six_hours', 'myprefix_cron_hook' );
    }
    
    // Aggancia l'azione che verrà eseguita ogni sei ore
    add_action( 'myprefix_cron_hook', 'myprefix_cron_function' );
    
    // Crea la tua funzione che verrà eseguita dal cron
    function myprefix_cron_function() {
        // la tua funzione...
    }

Puoi consultare questi tutorial:

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/

Custom WP Cron:

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

ricerca Google

28 feb 2015 22:24:07
1

Bene, 1427488800 corrisponde al 27 marzo 2015, quindi il tuo evento non è ancora impostato per iniziare.

Inoltre, tieni presente che gli eventi programmati di WordPress si attiveranno solo se qualcuno visita il sito in quel momento.

28 feb 2015 00:20:40
Commenti

Ora, come risolvere? @vancoder

Mortzea Mortzea
28 feb 2015 11:10:27
0

Questo codice funziona per me, penso che sia più vicino alla domanda originale. Vuoi ottenere il tempo UNIX + fuso orario per quando desideri che venga eseguito. Una volta che il cron viene eseguito e rimosso da WP, si ricrea automaticamente all'orario che specifichi.

Nell'esempio seguente, l'ho configurato per funzionare con l'orario AEST (GMT+10) alle 6 del mattino ogni giorno. Quindi lo sto programmando per GMT 20:00 ogni giorno.

if (!wp_next_scheduled('cron_name')) {
    $time = strtotime('today'); //restituisce la mezzanotte di oggi
    $time = $time + 72000; //aggiungi un offset per l'orario del giorno che desideri, ricordando che questo è in GMT.
    wp_schedule_event($time, 'daily', 'cron_name');
}
5 apr 2018 10:00:15