Wp_Schedule_Event în fiecare zi la o oră specifică

27 feb. 2015, 23:24:55
Vizualizări: 72K
Voturi: 13

Am scris următorul cod pentru a rula funcția mea în fiecare zi la ora 16:20..

Dar cred că există o problemă în cod..

nu funcționează

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(){

////Codul meu

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

Funcția time() nu acceptă un argument de intrare, încercați în schimb funcția strtotime() sau funcția strftime() pentru a crea marcaje temporale personalizate dintr-un șir de caractere. Dar dacă deja aveți marcajul temporal, nu aveți nevoie de ele.

birgire birgire
28 feb. 2015 01:06:52
Toate răspunsurile la întrebare 4
0
32

În loc să folosești time(), utilizează funcția strtotime() pentru a putea specifica ora zilei - aceasta va folosi data de astăzi cu ora pe care o specifici. Deci, în cazul tău:

strtotime('16:20:00'); // ora 16:20

Folosirea în funcția wp_schedule_event ar arăta astfel:

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

WP Cron rulează atunci când cineva vizitează site-ul tău. Astfel, dacă nimeni nu vizitează, cron-ul nu va rula niciodată.

Acum există 2 soluții:

  1. Dezactivează WP Cron, folosește un cron job real și personalizează-l.

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

  1. Folosește un interval personalizat în wp_schedule_event():

    function myprefix_custom_cron_schedule( $schedules ) {
        $schedules['every_six_hours'] = array(
            'interval' => 21600, // La fiecare 6 ore
            'display'  => __( 'La fiecare 6 ore' ),
        );
        return $schedules;
    }
    add_filter( 'cron_schedules', 'myprefix_custom_cron_schedule' );
    
    // Programează o acțiune dacă nu este deja programată
    if ( ! wp_next_scheduled( 'myprefix_cron_hook' ) ) {
        wp_schedule_event( time(), 'every_six_hours', 'myprefix_cron_hook' );
    }
    
    // Conectează-te la acțiunea care va rula la fiecare 6 ore
    add_action( 'myprefix_cron_hook', 'myprefix_cron_function' );
    
    // Creează funcția care rulează pe cron
    function myprefix_cron_function() {
        // funcția ta...
    }
    

Și poți consulta aceste tutoriale:

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/

WP Cron personalizat:

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

căutare Google

28 feb. 2015 22:24:07
1

Ei bine, 1427488800 corespunde datei de 27 martie 2015, deci evenimentul tău nici măcar nu a fost programat să înceapă încă.

De asemenea, reține că evenimentele programate în WordPress se vor declanșa doar dacă cineva accesează site-ul în acel moment.

28 feb. 2015 00:20:40
Comentarii

Acum, cum repar? @vancoder

Mortzea Mortzea
28 feb. 2015 11:10:27
0

Acest cod funcționează pentru mine, cred că este mai aproape de întrebarea originală. Vrei să obții timpul UNIX + fusul orar pentru momentul în care dorești să se execute. Odată ce cron-ul se execută și este eliminat din WP, acesta se recreează la ora pe care o specifici.

În exemplul următor, am făcut să funcționeze pentru AEST (GMT+10) la ora 6 dimineața în fiecare zi. Așadar, programez acțiunea pentru GMT 20:00 în fiecare zi.

if (!wp_next_scheduled('cron_name')) {
    $time = strtotime('today'); //returnează miezul nopții pentru ziua curentă
    $time = $time + 72000; //adaugă un offset pentru ora la care dorești execuția, ținând cont că aceasta este în GMT.
    wp_schedule_event($time, 'daily', 'cron_name');
}
5 apr. 2018 10:00:15