J'ai une fonction à exécuter toutes les 5 minutes. J'ai fait référence à la suite du codex:
<?php wp_schedule_event(time(), 'hourly', 'my_schedule_hook', $args); ?>
Je veux exécuter cette fonction tous les 5 menus, quel que soit le moment de commencer. Comment est-ce que je peux cela?
Il indique également que le codex indique que cron sera exécuté lorsqu'un visiteur visitera le site. Existe-t-il un moyen d'exécuter le cron juste comme par minutes et sans attendre une visite?
disons que la fonction suivante doit être exécutée toutes les 5 minutes, alors comment puis-je faire cela en utilisant wp_schedule_event()
ou wp_cron
?
function run_evry_five_minutes(){
// codes go here
}
functions.php
Réponses:
Vous pouvez créer de nouveaux horaires via cron_schedules:
Vous pouvez maintenant planifier votre fonction:
Pour le planifier une seule fois, enveloppez-le dans une fonction et vérifiez avant de l'exécuter:
Notez le paramètre $ args! Ne pas spécifier le paramètre $ args dans wp_next_scheduled, mais avoir $ args pour wp_schedule_event, provoquera la planification d'un nombre presque infini du même événement (au lieu d'un seul).
Enfin, créez la fonction réelle que vous souhaitez exécuter:
Je pense qu'il est important de mentionner que wp-cron vérifie le calendrier et exécute les travaux planifiés à chaque fois qu'une page est chargée.
Donc, si vous avez un site Web à faible trafic qui n'a qu'un seul visiteur par heure, wp-cron ne fonctionnera que lorsque ce visiteur naviguera sur votre site (une fois par heure). Si vous avez un site à fort trafic avec des visiteurs qui demandent une page toutes les secondes, wp-cron sera déclenché toutes les secondes, provoquant une charge supplémentaire sur le serveur.
La solution consiste à désactiver wp-cron et à le déclencher via une véritable tâche cron dans l'intervalle de temps de la tâche wp-cron planifiée qui se répète le plus rapidement (5 min dans votre cas).
Lucas Rolff explique le problème et donne la solution en détail.
Comme alternative, vous pouvez utiliser un service tiers gratuit comme UptimeRobot pour interroger votre site (et déclencher wp-cron) toutes les 5 minutes, si vous ne souhaitez pas désactiver wp-cron et le déclencher via un véritable travail cron.
la source
Si votre site reçoit un trafic important, vous pouvez essayer
set_transient()
de l'exécuter (très approximativement) toutes les 5 minutes, par exemple:la source
functions.php
lorsqu'une marque de visite de la page, une mise à jour sera faite à une table dans ma base de données ..function run_evry_five_minutes() { $homepage = file_get_contents('link to visit'); echo $homepage; }
. Mais la table DB n'est pas mise à jour même après 6 minutes.get_transient()
/set_transient()
sans les trucs cron est beaucoup plus logique, beaucoup plus simple, mettra à jour la réponse ...Vous pouvez le déclencher lors de l'activation du plugin au lieu de chaque appel de plugin:
la source
Je crains qu'à part attendre que quelqu'un visite votre site qui exécute une fonction, la seule autre option consiste à configurer un travail cron sur votre serveur en utilisant quelque chose comme ceci /programming/878600/how -to-create-cronjob-using-bash ou si vous avez une interface de style cpanel sur votre serveur, il y a parfois une interface pour la configurer.
la source
functions.php
parce que lorsque la fonction est dans unplugin
ou dansfunctions.php
nous ne pouvons pas demander aux clients de configurer un cron à partir de cpanel sur leur propre ..Le plugin Cronjob Scheduler vous permet d'exécuter des tâches fréquentes de manière fiable et en temps opportun sans que personne n'ait à visiter votre site, tout ce dont vous avez besoin est d'au moins 1 action et d'un calendrier Unix Crontab.
Il est très facile à utiliser et très flexible. Vous créez votre propre fonction et définissez une action en son sein. Ensuite, vous pouvez choisir votre action dans le menu du plugin et la déclencher à tout moment.
la source
J'ai une solution possible en utilisant une fonction de planification et une fonction récursive WP Ajax.
file_get_contents()
Si le compteur est supérieur ou égal à 60, il réinitialisera le compteur et attendra la prochaine tâche cron.
Si le compteur est multiple de 5 (donc toutes les 5 minutes), il exécutera la fonction souhaitée
Et, en plus des conditions, il dormira pendant 59 secondes
sleep(59);
(en supposant que votre fonction soit rapide). Après le sommeil, il se déclenchera àfile_get_contents()
nouveau.Choses importantes à noter:
set_time_limit(90);
pour essayer d'empêcher le serveur d'interrompre votre fonction avant la mise en veilleC'est une solution, pas une bonne, et elle peut être bloquée par le serveur. À l'aide d'un cron externe, vous pouvez définir une fonction simple et le serveur utilisera les ressources une fois toutes les 5 minutes. En utilisant cette solution, le serveur utilisera des ressources dessus tout le temps.
la source
La réponse de @ johano explique correctement comment configurer un intervalle personnalisé pour le travail cron WP. La deuxième question est cependant sans réponse, qui est de savoir comment exécuter un cron toutes les minutes:
Dans le fichier
wp-config.php
, ajoutez le code suivant:Ajouter un travail cron (
crontab -e
sous unix / linux):La première partie (étape 1) désactivera le travail cron interne WordPress. La deuxième partie (étape 2) exécutera manuellement le travail cron WordPress toutes les minutes.
Avec la réponse de @ Johano (comment exécuter une tâche toutes les 5 minutes) et la mienne (comment exécuter manuellement le cron), vous devriez être en mesure d'atteindre votre objectif.
la source