J'ai un événement quotidien de programme wp.
Je sais que cela se produit lorsqu'un utilisateur visite le site et que le temps imparti est écoulé.
Si j’ai commencé aujourd’hui à midi et si demain le premier visiteur arrive demain à 13h20, cet événement aura lieu demain à 13h20.
Jour après jour, cela se passe après 1h20 ou après 12h?
wp-cron est souvent appelé un pseudo-cron, car il ne fonctionne pas selon un planning strict. Si personne ne visite le site, il ne fonctionne pas. Si vous planifiez l'exécution d'un événement wp-cron, par exemple, toutes les 12 heures, il s'exécutera au plus toutes les 12 heures. Mais, si votre site a très peu de trafic, il pourrait s'écouler plus de 12 heures entre les analyses.
Si vous souhaitez qu'un événement se produise toutes les 12 heures ou tous les jours à la même heure, vous devez utiliser quelque chose en dehors de WordPress. Les approches les plus courantes incluent l’utilisation du planificateur de tâches système (sous Linux, on l’appelle généralement "cron") ou d’un service tiers comme EasyCron.
En supposant que vous soyez sur un serveur Linux (de loin l'environnement d'hébergement le plus courant), créez un petit script Shell ressemblant à ceci:
#!/bin/bash
curl http://yoursite.name.com/wp-cron.php >/dev/null
Cela lancera la commande "curl", pour charger la page wp-cron.php de votre site, puis ignorera immédiatement les résultats (en vidant la sortie dans/dev/null). Vous ne vous souciez pas du résultat de la page, et en fait, il n’ya normalement aucun résultat. Vous voulez juste être sûr que la page est chargée.
Ensuite, ajoutez une ligne à votre crontab ("crontab -e" ouvrira le fichier crontab dans votre éditeur par défaut, probablement vi ) qui ressemble à ceci:
0 0,12 * * * /home/user/touch-site.sh
(Évidemment, modifiez l'emplacement du fichier où que vous mettiez votre script. Assurez-vous également que le script est exécutable en exécutant "chmod 700 touch-site.sh".)
Cet exemple visitera votre site quotidiennement, à midi et à minuit (heure du serveur), puis exécutera le script wp-cron. Pour plus de détails sur le fonctionnement de ce fichier, lancez "man crontab".
Pour répondre à cette requête
@sumit Êtes-vous sûr de ça? Un de mes amis a dit que si cela se produit aujourd’hui à 13h20 le lendemain, cela arrivera à 13h20, et non à 12h
Comment ça marche:
Vous planifiez un événement en utilisant l’horodatage actuel, c’est-à-dire midi le lundi.
wp_schedule_event(time(), 'daily', 'my_schedule_hook');
Quelqu'un a visité le site lundi à 01h20.
WP appelle ce morceau de code
if ( $schedule != false ) {
$new_args = array($timestamp, $schedule, $hook, $v['args']);
call_user_func_array('wp_reschedule_event', $new_args);
}
wp_unschedule_event( $timestamp, $hook, $v['args'] );
/**
* Fires scheduled events.
*
* @ignore
* @since 2.1.0
*
* @param string $hook Name of the hook that was scheduled to be fired.
* @param array $args The arguments to be passed to the hook.
*/
do_action_ref_array( $hook, $v['args'] );
Ici, il appelle la fonction wp_reschedule_event()
qui utilise le même horodatage. Le prochain horaire sera donc le mardi 12h00PAS= 1h20. Ensuite, il appellera hook action action.
Les gens commettent souvent l’erreur suivante: ils appellent wp_schedule_event()
directement dans le functions.php
afin que WP programme l’événement à chaque nouvel horodatage. La bonne façon est de vérifier si le planning est là, puis le créer.
$my_schedule_hook = wp_next_scheduled('my_schedule_hook');
if (!$my_schedule_hook) {
wp_schedule_event(time(), 'daily', 'my_schedule_hook');
}
Ainsi, il entrera seulement dans le bloc if
seulement la première fois, lorsqu'il n'y aura pas d'horaire du tout. Néanmoins, vous pouvez voir tout le programme avec ce plugin WP Crontrol