Wp_Schedule_Event jeden Tag zu einer bestimmten Zeit

9

Ich schreibe folgenden Code, um meine Funktion jeden Tag um 16:20 Uhr auszuführen.

Aber ich denke, das ist das Problem im Code.

funktioniert nicht

Epochenzeitstempel: 1427488800

28.03.2015 01:10:00 Uhr

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
quelle
1
Die time()Funktion verwendet kein Eingabeargument. Versuchen Sie stattdessen die strtotime()Funktion oder die strftime()Funktion, um benutzerdefinierte Zeitstempel aus einer Zeichenfolge zu erstellen. Aber wenn Sie bereits den Zeitstempel haben, brauchen Sie ihn nicht.
Birgire

Antworten:

18

WP Cron wird ausgeführt, wenn jemand Ihre Website besucht. Wenn also niemand besucht, läuft der Cron nie.

Jetzt gibt es 2 Lösungen:

  1. Deaktivieren Sie WP Cron, verwenden Sie einen echten Cron-Job und passen Sie ihn an.

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

  1. Verwenden Sie ein benutzerdefiniertes Intervall in 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...
    }

und Sie können diese Tuts sehen

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/

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

Google-Suche

amir rasabeh
quelle
12

Verwenden Sie anstelle von time () die Funktion strtotime () , damit Sie die Uhrzeit angeben können. Dabei wird das heutige Datum mit der von Ihnen angegebenen Uhrzeit verwendet. Also in deinem Fall:

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

Die Verwendung in der wp_schedule_eventFunktion würde folgendermaßen aussehen:

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

Nun, 1427488800 wird bis zum 27. März 2015 aufgelöst, sodass Ihre Veranstaltung noch nicht einmal beginnen soll.

Beachten Sie außerdem, dass geplante WP-Ereignisse nur ausgelöst werden, wenn zu diesem Zeitpunkt jemand auf die Website gelangt.

Vancoder
quelle
Nun, wie beheben? @ Vancoder
Mortzea
0

Dieser Code funktioniert für mich, ich glaube, er ist näher an der ursprünglichen Frage. Sie möchten die UNIX-Zeit + Zeitzone abrufen, wenn sie ausgeführt werden soll. Sobald der Cron ausgeführt und aus WP entfernt wurde, wird er zu dem von Ihnen angegebenen Zeitpunkt neu erstellt.

Im folgenden Beispiel funktioniert es jeden Morgen um 6 Uhr morgens für AEST (GMT + 10). Also plane ich es jeden Tag für GMT 20:00.

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