web-dev-qa-db-fra.com

wp_schedule_event n'acceptera pas les arguments

J'essaie de programmer des événements sur une base horaire, mais cela ne fonctionne pas. Pourquoi, je ne peux pas comprendre.

Voici une fonction que j'utilise pour planifier un événement.

add_action( 'scheduled_update_feeds', 'update_feeds', 10, 2 );

function scheduled_activation() {
    wp_schedule_event( time(), 'everyhour', 'scheduled_update_feeds', array( 0, 'everyhour' ) );
}
register_activation_hook( __FILE__, 'scheduled_activation' );

D'après ce que je comprends, cela devrait être activé lors de l'activation du plug-in et transmettre un événement de planification en fonction de mes paramètres.

Lorsque je l'utilise sans les arguments de tableau, cela fonctionne , mais je dois utiliser des arguments pour leur transmettre ma fonction planifiée.

Et c'est la fonction

function update_feeds($ids = false, $timing = false) {
    do something
}

Quand je l'utilise comme ça, ça marche.

wp_schedule_event( time(), 'everyhour', 'scheduled_update_feeds' );

Même si je n'utilise pas args dans ma fonction update_feed, cela ne fonctionne pas non plus. La chose étrange est que lorsque j'utilise un calendrier unique, cela fonctionne.

comme ça

wp_schedule_single_event( time() + 10, 'scheduled_update_feeds', array($ids) );

Donc je ne comprends pas pourquoi ça ne marchera pas.

Et j'ai bien défini "chaque heure" dans ma liste de rendez-vous.

add_filter( 'cron_schedules', 'my_schedule' ); 

$schedules['everyhour'] = array(
    'interval' => 60,
    'display' => __( 'Every hour', 'easy-video-grabber' )
);

J'ai vérifié son existence avec le Cron Schedules plugin et le calendrier existe.

Ce n'est pas une solution à votre problème, mais cela peut vous conduire dans la bonne direction pour résoudre le problème. Je suggérerais de consulter ce plugin pour éventuellement vous aider à savoir ce qui se passe:

WP Cron Control

Il offre une vue rapide des tâches cron planifiées sur votre site. Je l'ai récemment utilisé pour résoudre un problème survenant lorsque des courriels programmés n'étaient pas envoyés.

1
Douglas.Sesar

De manière simpliste. Enregistrez un fichier, intégrez-le avec action et utilisez-le. Pour exemple rapide:

Enregistrer un événement:

// Create new cron job filter
add_filter( 'cron_schedules', 'cron_add_five_minute' );
function cron_add_five_minute( $schedules ) {
  // Adds once weekly to the existing schedules.
  $schedules['five_minute'] = array(
      'interval' => 300,
      'display' => __( 'Five Minute' )
  );
  return $schedules;
}

Exécuter les fonctions:

add_action( 'wpfex_five_minute_event', 'wpfex_do_this_five_minute' );

/**
 * On the scheduled action hook, run a function.
 */
function wpfex_do_this_five_minute() {
    // Execute file every five minutes      
    // Do what ever you want to do
}

* Veuillez noter que les tâches wp cron sont différentes des tâches habituelles de linux cron. Wordpress exécute un fil en interne lorsque l'utilisateur clique sur le site. Si aucun accès au site Web n'a lieu dans la journée, aucune tâche cron n'est exécutée, car le thread de tâche cron ne s'exécute pas.

Pour plus d'informations sur le fonctionnement des tâches cron dans WP, consultez ce guide guide de référence rapide

Merci

1
Vee

J'ai eu ce problème avant. Ce qui se passe (à première vue), c’est que vous configurez le hook d’action pour qu’il soit planifié, mais que vous ne le fassiez pas.

par exemple.

function update_feeds($ids = false, $timing = false) {
   do something
}
wp_schedule_event( time(), 'everyhour', 'scheduled_update_feeds' );

En plus de cela, vous aurez besoin de quelque chose comme:

add_action('scheduled_update_feeds', 'update_feeds', 10, 2);

wp_schedule_event configure une action à exécuter. Ainsi, en plus d’une fonction permettant de faire des choses, vous devez ajouter une action à exécuter sur la balise d’action spécifiée.

  • Votre wp_schedule_event indique à wordpress d'effectuer do_action le plus régulièrement possible
  • Votre fonction en cours contient votre traitement à faire
  • Vous devez utiliser add_action sur schedule_update_feeds pour exécuter votre fonction.

Je vous recommande également de vérifier s'il existe avant de l'ajouter:

$next_run = wp_next_scheduled('scheduled_update_feeds');
if ( $next_run ) {
    wp_unschedule_event( $next_run, 'scheduled_update_feeds');
}
$first_run = time();
$result = wp_schedule_event( $first_run, 'everyhour', 'scheduled_update_feeds');

Enfin, je vous recommande d'utiliser des noms moins génériques, en particulier pour votre fonction de traitement. Il y a probablement beaucoup de gens qui créeront une fonction update_feeds.

Quoi qu'il en soit, espérons que cela aide.

0
Privateer