web-dev-qa-db-fra.com

Comment puis-je planifier cron dans wordpress pour chaque seconde?

Je souhaite planifier un travail cron dans Wp3.5.1 pour envoyer un courrier électronique au client dont le rendez-vous est en attente.

voici du code que j'essaye:

Pour le test, planifiez le maïs à chaque seconde pour insérer une ligne dans le tableau.

// insert row every second
add_action('wp', 'my_activation');
function my_activation() {
    if ( !wp_next_scheduled( 'my_event' ) ) {
        wp_schedule_event( time(), 'hourly', 'my_event');
    }
}

add_action('my_event', 'do_this_event');
function do_this_event() {
    global $wpdb;
    $wpdb->query("INSERT INTO `wordpress-testing`.`wp_test` (`id`, `text`) VALUES (NULL, 'b');");
}

wp_get_schedules('my_event');

//custom recurrence
add_filter( 'cron_schedules', 'cron_add_every_sec' );
function cron_add_every_sec( $schedules ) {
    $schedules['hourly'] = array(
        'interval' => 1,
        'display' => __( 'Do Secondly' )
    );
    return $schedules;
}

Peut-être que je me trompe. Alors s'il vous plaît aidez-moi à travers.

cron est-il exécuté automatiquement après l'activation une fois OR son besoin de visites récurrentes après l'heure prévue?

1
Frank

Je ne pense pas qu'il soit utile de faire fonctionner un cron toutes les secondes, mais la fonction elle-même est assez simple.

Vous ajoutez un filtre au cron_schedules:

function f711_add_seconds( $schedules ) {
    $schedules['everysecond'] = array(
        'interval' => 1,
        'display' => __('Every Second')
    );
    return $schedules;
}
add_filter( 'cron_schedules', 'f711_add_seconds' ); 

Vous pouvez maintenant utiliser everysecond dans votre wp_schedule_event au lieu de hourly.

Notez que le Cron n'est pas exécuté toutes les secondes, si rien ne se passe sur votre site, mais il sera limité à max. une exécution par seconde. Cron définit une valeur dans votre table options- pour un horodatage lorsque la fonction doit être exécutée la prochaine fois. Ensuite, Cron vérifie si l'heure est dans le futur ou dans le passé et si c'est dans le passé, la fonction est exécutée. Le Cron s'exécute automatiquement à ce stade mais doit être paramétré à nouveau. Alors assurez-vous d'inclure le

if ( !wp_next_sceduled('my_event') ) { /* scheduling code */ }

dans votre code.

Pour plus d'informations sur le fonctionnement de Cron, visitez la page Codex .

Vous ne devez pas écraser la hourly comme vous l'avez fait, car certaines fonctions peuvent utiliser cette planification. Veuillez noter que certains plugins peuvent effacer votre Cronschedule s'ils ne sont pas codés correctement (un plugin de mise en cache avait déjà été utilisé une fois).

6
fischi