{"id":1116,"date":"2022-05-13T17:33:39","date_gmt":"2022-05-13T15:33:39","guid":{"rendered":"https:\/\/jagullo.fr\/blog\/?p=1116"},"modified":"2022-11-26T16:34:11","modified_gmt":"2022-11-26T15:34:11","slug":"ajouter-une-tache-cron-sous-wordpress-et-woocommerce","status":"publish","type":"post","link":"https:\/\/jagullo.fr\/blog\/ajouter-une-tache-cron-sous-wordpress-et-woocommerce\/","title":{"rendered":"Ajouter une t\u00e2che Cron sous WordPress et WooCommerce"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Des \u00e9v\u00e9nements pour automatiser sa boutique<\/h2>\n\n\n\n<p>Le cron d\u00e9signe un programme informatique sur Linux permettant <strong>de lancer \u00e0 intervalle r\u00e9gulier un script<\/strong> automatique. Il peut \u00eatre \u00e9crit dans diff\u00e9rents langages de programmation. Avec Apache ou Nginx, on peut lancer certaines t\u00e2ches sur son site ou sa boutique. On peut appeler une hook WordPress pour lancer des actions \u00e0 une date pr\u00e9cise et qui prendraient du temps \u00e0 faire manuellement. Sous Windows il est possible d&rsquo;utiliser le planificateur de t\u00e2ches pour lancer un .BAT ouvrant le terminal appellant un fichier.<\/p>\n\n\n\n<p>WordPress int\u00e8gre <strong>nativement un syst\u00e8me cron<\/strong> qui est appel\u00e9 avec le wp-cron.php du r\u00e9pertoire racine. Les h\u00e9bergeurs permettent de le lancer en param\u00e9trant un d\u00e9lai d&rsquo;ex\u00e9cution au niveau du crontab. Quand ce fichier est appel\u00e9 toutes les fonctions du functions.php ou des plugins et qui se sont abonn\u00e9es sont lanc\u00e9es. Beaucoup d&rsquo;extensions lancent des t\u00e2ches automatiques sur Woocommerce ce qui peut ralentir un site si elles sont appel\u00e9es dans un intervalle de temps trop r\u00e9gulier.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/05\/illustration_cron-woocommerce.jpg\" alt=\"Comment lancer une t\u00e2che \u00e0 intervalle r\u00e9gulier en code\" class=\"wp-image-1142\" width=\"720\" height=\"480\" srcset=\"https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/05\/illustration_cron-woocommerce.jpg 960w, https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/05\/illustration_cron-woocommerce-300x200.jpg 300w, https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/05\/illustration_cron-woocommerce-768x512.jpg 768w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><figcaption class=\"wp-element-caption\">Comment lancer une t\u00e2che \u00e0 intervalle r\u00e9gulier en code<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Activer le cron au niveau du serveur<\/h2>\n\n\n\n<p>Si on a la possibilit\u00e9 de mettre en place un cron au niveau du serveur de son h\u00e9bergement, alors il faut le d\u00e9sactiver dans le syst\u00e8me de WP avec la constante <strong>DISABLE_WP_CRON<\/strong> \u00e0 inscrire dans le fichier de configuration. Cela va demander \u00e0 WP de ne pas appeler le cron \u00e0 chaque visite sur son site Internet pour optimiser les performances. Pour le d\u00e9sactiver il faut ajouter la ligne suivante dans le wp-config.php :<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>define('DISABLE_WP_CRON', true);<\/code><\/pre>\n\n\n\n<p>Ensuite pour bien v\u00e9rifier qui le cron est appel\u00e9 dans WordPress et WooCommerce il faut <strong>se connecter au serveur en SSH<\/strong> et utiliser la commande suivante dans le terminal :<\/p>\n\n\n\n<pre class=\"wp-block-code language-bash\"><code>crontab -l<\/code><\/pre>\n\n\n\n<p>Cette commande permet de lister toutes les actions enregistr\u00e9es dans la table crontab. Si wp-cron.php est d\u00e9j\u00e0 configur\u00e9, il devrait s&rsquo;afficher dans une ligne indiquant un d\u00e9lai d&rsquo;ex\u00e9cution. Si la table crontab est vide, il faut ajouter une t\u00e2che dans la table en la r\u00e9glant toutes les demi-heures par exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code language-bash\"><code>*\/30 * * * * wget -q -O - https:\/\/mywebsite.com\/wp-cron.php?doing_wp_cron &gt;\/dev\/null 2&gt;&amp;1<\/code><\/pre>\n\n\n\n<p>Sur <strong>OVH<\/strong> il faut se connecter au manager, aller dans les t\u00e2ches planifi\u00e9es&nbsp;de son h\u00e9bergement et cr\u00e9er une planification. On indique la commande \u00e0 ex\u00e9cuter avec le lien vers le fichier wp-cron.php puis on renseigne l&rsquo;intervalle de temps.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">S&rsquo;abonner au cron et ex\u00e9cuter une fonction<\/h2>\n\n\n\n<p>Pour bien param\u00e9trer le cron que l&rsquo;on souhaite mettre en place, je conseille d&rsquo;installer le plugin <a href=\"https:\/\/fr.wordpress.org\/plugins\/wp-crontrol\/\" target=\"_blank\" rel=\"noreferrer noopener\">WP Control<\/a> permettant de lister <strong>toutes les t\u00e2ches cron<\/strong> de WordPress au niveau des plugins ou du th\u00e8me. Avec ce plugin on peut g\u00e9rer les t\u00e2ches et les fr\u00e9quences d&rsquo;ex\u00e9cution appelant des fonctions personnalis\u00e9es. <\/p>\n\n\n\n<p>Les fr\u00e9quences d\u00e9pendent en partie du crontab renseign\u00e9 au niveau de l&rsquo;h\u00e9bergement. Si le crontab est r\u00e9gl\u00e9 toutes les 15 minutes, alors les ex\u00e9cutions ne pourront se faire en dessous de ce d\u00e9lai. Il est bien de r\u00e9gler un d\u00e9lai de 30 minutes et de lancer les fonctions gourmandes en ressources dans des cr\u00e9neaux horaires ou il y a peu de visiteurs.<\/p>\n\n\n\n<div class=\"wp-block-columns no-margin-bottom is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/05\/screen_cron-task.png\" alt=\"Interface des actions ex\u00e9cut\u00e9es de WP Control\" class=\"wp-image-1146\" width=\"480\" height=\"253\" srcset=\"https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/05\/screen_cron-task.png 960w, https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/05\/screen_cron-task-300x158.png 300w, https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/05\/screen_cron-task-768x404.png 768w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><figcaption class=\"wp-element-caption\">Interface des actions ex\u00e9cut\u00e9es<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/05\/screen_cron-frequency.png\" alt=\"Interface des fr\u00e9quences utilis\u00e9es de WP Control\" class=\"wp-image-1145\" width=\"480\" height=\"252\" srcset=\"https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/05\/screen_cron-frequency.png 960w, https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/05\/screen_cron-frequency-300x158.png 300w, https:\/\/jagullo.fr\/blog\/wp-content\/uploads\/2022\/05\/screen_cron-frequency-768x403.png 768w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><figcaption class=\"wp-element-caption\">Interface des fr\u00e9quences utilis\u00e9es<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Avec Wp Control on peut ajouter l&rsquo;action <strong>my_custom_function<\/strong> qui s&rsquo;ex\u00e9cutera toutes les nuits \u00e0 0h avec la fr\u00e9quence daily. La fr\u00e9quence daily est native \u00e0 WP, il y a plusieurs fr\u00e9quences natives et on peut en cr\u00e9er de nouvelles. Dans le functions.php on ajoute la fonction qui v\u00e9rifie le prochain passage du cron sur l&rsquo;action <strong>wp<\/strong> comme indiqu\u00e9. Si au prochain passage du cron le d\u00e9lai de la t\u00e2che est pass\u00e9 alors <strong>call_<strong>my_custom_function<\/strong><\/strong> sera appel\u00e9e.<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>add_action( 'wp', 'check_cron_job' );\nfunction check_cron_job() {\n    if ( ! wp_next_scheduled( 'my_custom_function' ) ) {\n        wp_schedule_event( time(), 'daily', 'my_custom_function' );\n    }\n}\nadd_action( 'my_custom_function', 'call_my_custom_function' );\nfunction call_my_custom_function() {\n    \/\/ function ...\n}<\/code><\/pre>\n\n\n\n<p>Pour \u00e9viter de v\u00e9rifier le hook \u00e0 chaque appel du functions.php on peut ajouter une simple condition afin d&rsquo;optimiser un peu tout cela. La fonction <strong>wp_doing_cron<\/strong> v\u00e9rifie si l&rsquo;ex\u00e9cution du code en cours se fait avec le cron de WordPress. Cela \u00e9vite de devoir enregistrer une hook lors de la navigation dans le front-office ou le back-office.<\/p>\n\n\n\n<pre class=\"wp-block-code language-php\"><code>if ( wp_doing_cron() ) {\n    add_action( 'wp', 'check_cron_job' );\n    function check_cron_job() {\n        if ( ! wp_next_scheduled( 'my_custom_function' ) ) {\n            wp_schedule_event( time(), 'daily', 'my_custom_function' );\n        }\n    }\n    add_action( 'my_custom_function', 'call_my_custom_function' );\n    function call_my_custom_function() {\n        \/\/ function ...\n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Exemples de fonctions \u00e0 utiliser avec WooCommerce<\/h2>\n\n\n\n<p>Il y a \u00e9norm\u00e9ment de possibilit\u00e9s \u00e0 utiliser <strong>le cron avec WooCommerce<\/strong>. Certains plugins s&rsquo;abonnent automatiquement pour lancer des actions r\u00e9currentes. Tout d&rsquo;abord en ce qui concerne la s\u00e9curit\u00e9, on peut faire des sauvegardes automatiques de la base de donn\u00e9es avec les derni\u00e8res commandes. Envoyer un message \u00e0 un groupe de clients selon des conditions, demander un avis clients une fois que la commande est class\u00e9e en termin\u00e9e apr\u00e8s un d\u00e9lai ou faire la relance de paniers abandonn\u00e9s. <\/p>\n\n\n\n<p>Il est possible d&rsquo;envoyer un message concernant les commandes non pay\u00e9es ou un autre de bienvenue aux nouveaux inscrits sur notre site ou encore passer un produit en hors stock \u00e0 une date pr\u00e9cise. Enfin on peut par exemple activer une r\u00e9duction tous les lundis sur un produit particulier au lieu d&rsquo;utiliser le syst\u00e8me de WooCommerce qui ne propose qu&rsquo;un seul intervalle de promotion.<\/p>\n\n\n\n<p>Il existe une multitude d&rsquo;id\u00e9es \u00e0 exploiter pour am\u00e9liorer le fonctionnement de sa boutique WooCommerce. Il faut r\u00e9fl\u00e9chir d&rsquo;une part \u00e0 comment les actions automatiques peuvent am\u00e9liorer l&rsquo;exp\u00e9rience utilisateur et mieux le fid\u00e9liser puis d&rsquo;autre part \u00e0 comment aider les administrateurs dans leurs t\u00e2ches quotidiennes. Il est possible de d\u00e9sactiver un compte utilisateur qui n&rsquo;a pas r\u00e9gl\u00e9 son abonnement par exemple. Il est important de se questionner sur comment une action peut am\u00e9liorer le processus interne en aidant un pr\u00e9parateur de commande dans la gestion des produits ou un assistant commercial avec les utilisateurs.<\/p>\n\n\n\n<p>Le cron peut \u00eatre utile en local pour lancer des analyses de la base de donn\u00e9es de sa boutique apr\u00e8s export, pour v\u00e9rifier que les prix ou le stock des produits correspondent bien \u00e0 ceux que l&rsquo;on a en interne avec son logiciel. Le code ex\u00e9cut\u00e9 dans une t\u00e2che peut aider \u00e0 la v\u00e9rification des donn\u00e9es afin d&rsquo;am\u00e9liorer le travail des employ\u00e9s et des responsables.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Un avantage concurrentiel pour sa boutique en ligne<\/h2>\n\n\n\n<p>Cette fonctionnalit\u00e9 permet de r\u00e9aliser toute une panoplie <strong>d&rsquo;actions automatiques tr\u00e8s utiles<\/strong> pour les administrateurs d&rsquo;un site web facilitant le travail des gestionnaires et les processus interne d&rsquo;une entreprise. Avec un d\u00e9veloppeur web qui connait bien l&rsquo;environnement utilis\u00e9, une soci\u00e9t\u00e9 peut mettre en place des actions automatiques qui auraient demand\u00e9es beaucoup de temps manuellement. C&rsquo;est un atout dans un \u00e9cosyst\u00e8me concurrenc\u00e9 pour rester comp\u00e9titif en am\u00e9liorant l&rsquo;exp\u00e9rience utilisateur et le travail des employ\u00e9s.<\/p>\n\n\n\n<p>Ce syst\u00e8me procure des avantages consid\u00e9rables pour automatiser certains aspects de sa boutique en ligne. Cependant il demande des ressources niveau serveur et de nombreuses extensions appellent des scripts \u00e9v\u00e9nementiels. Il faut penser \u00e0 le d\u00e9sactiver puis le r\u00e9gler au niveau serveur afin qu&rsquo;il ne se lance que dans un intervalle d&rsquo;une demi-heure.&nbsp;<\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"\/blog\/wp-content\/themes\/Extra-child\/assets\/css\/prism.css\">\n<script src=\"\/blog\/wp-content\/themes\/Extra-child\/assets\/js\/prism.js\"><\/script>\n<div class=\"list-tags\"><a href=\"https:\/\/jagullo.fr\/blog\/tag\/php\/\" class=\"link-tag\" title=\"PHP\">PHP<\/a><a href=\"https:\/\/jagullo.fr\/blog\/tag\/woocommerce\/\" class=\"link-tag\" title=\"WooCommerce\">WooCommerce<\/a><a href=\"https:\/\/jagullo.fr\/blog\/tag\/wordpress\/\" class=\"link-tag\" title=\"WordPress\">WordPress<\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>Des \u00e9v\u00e9nements pour automatiser sa boutique Le cron d\u00e9signe un programme informatique sur Linux permettant de lancer \u00e0 intervalle r\u00e9gulier un script automatique. Il peut \u00eatre \u00e9crit dans diff\u00e9rents langages de programmation. Avec Apache ou Nginx, on peut lancer certaines t\u00e2ches sur son site ou sa boutique. On peut appeler une hook WordPress pour lancer [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1142,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[24],"tags":[27,32,31],"class_list":["post-1116","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriels","tag-php","tag-woocommerce","tag-wordpress","et-has-post-format-content","et_post_format-et-post-format-standard"],"_links":{"self":[{"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/posts\/1116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/comments?post=1116"}],"version-history":[{"count":2,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/posts\/1116\/revisions"}],"predecessor-version":[{"id":2367,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/posts\/1116\/revisions\/2367"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/media\/1142"}],"wp:attachment":[{"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/media?parent=1116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/categories?post=1116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jagullo.fr\/blog\/wp-json\/wp\/v2\/tags?post=1116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}