web-dev-qa-db-fra.com

Problème lors de la création de cron job wordpress

J'essaie actuellement de créer un plugin wordpress où je peux échanger des bitcoins. Je devrais créer un travail cron pour lequel je souhaite vérifier une valeur provenant de certains appels d'API, mais mon travail cron ne s'active pas correctement.

J'ai aussi essayé de faire un "écho" aléatoire pour voir si le problème vient de mon code API mais je pense que le problème est que wordpress n'active pas mon travail cron.

Ceci est mon code:

    function my_activation() {
    if (!wp_next_scheduled ( 'my_periodic_event' )) {
    wp_schedule_event(time(), 'thirtysec', 'my_periodic_event');
    }
    add_action('my_periodic_event', 'checkCurrencyValue');
}

    function checkCurrencyValue() {
        global $market, $quantita, $durata, $wpdb, $table_name;
        $table_name = $wpdb->prefix."bittrex_account_info";
        $users = $wpdb->get_results( "SELECT chiave FROM $table_name");
                    // The query will get the complete users login id/login name
        foreach ( $users as $user ) {
        echo $user->chiave;
        }
        $users = $wpdb->get_results( "SELECT chiave FROM $table_name WHERE email = '[email protected]'");
        $wpdb->update( $table_name, array( 'chiave' => $key, 'secret' => $users),array('email'=>'[email protected]'));

        $d = new BittrexxApi ($key, $secret);
        $quantita = $wpdb->get_var("SELECT quantita FROM wp_bittrex_account_info WHERE email = '$mail'");
        $discesaMax = $wpdb->get_var("SELECT discesaMax FROM wp_bittrex_account_info WHERE email = '$mail'");
        $maxValDol = $wpdb->get_var("SELECT maxvaldol FROM wp_bittrex_account_info WHERE email = '$mail'");
        $summ = $d->getMarketSummary("USDT-BTC");
        if($summ<discesaMax){
            //$balance = $d->buyLimit($market, $quantita, $durata);
        }
        else if($summ>maxValDol){
            //$balance = $d->sellLimit($market, $quantita, $durata);
        }       
}

Mon hook de registre fonctionne: la fonction my_activation () est exécutée, mais pas la fonction checkCurrencyValue (). Y a-t-il un problème?

Merci d'avance, Filippo

3
Filippo Momentè

Voici la référence minifiée que j'utilise pour configurer Wordpress cron, qui provient de wp_schedule_event() et cron_schedules :

Setup Cron

// SETUP CRON
add_action('wp', 'myplugin_schedule_cron');
function myplugin_schedule_cron() {
  if ( !wp_next_scheduled( 'myplugin_cron' ) )
    wp_schedule_event(time(), 'daily', 'myplugin_cron');
}

Fonction Cron

// the CRON hook for firing function
add_action('myplugin_cron', 'myplugin_cron_function');
#add_action('wp_head', 'myplugin_cron_function'); //test on page load

// the actual function
function myplugin_cron_function() {
    // see if fires via email notification
    wp_mail('[email protected]','Cron Worked', date('r'));
}

Intervalle de temps personnalisé

si les valeurs par défaut de Wordpress toutes les heures et tous les jours ne suffisent pas, vous pouvez créer les vôtres.

// CUSTOM TIME INTERVAL
add_filter('cron_schedules', 'myplugin_cron_add_intervals');
function myplugin_cron_add_intervals( $schedules ) {
  $schedules['customTime'] = array(
    'interval' => 30,
    'display' => __('Every 30sec')
  );
  return $schedules;
}

en remplaçant daily dans wp_schedule_event() par customTime

Voir les Crons

Vous pouvez également visualiser votre cron via une interface graphique avec un plugin: https://wordpress.org/plugins/search/cron+view/

5
David Sword