{"id":234236,"date":"2023-02-18T20:23:00","date_gmt":"2023-02-18T17:23:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234236"},"modified":"2023-02-23T17:22:20","modified_gmt":"2023-02-23T14:22:20","slug":"comment-creer-un-formulaire-frontal-avec-acf","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-creer-un-formulaire-frontal-avec-acf\/","title":{"rendered":"Comment cr\u00e9er un formulaire frontal avec ACF"},"content":{"rendered":"\n<p>Dans ce didacticiel, je vais vous montrer comment cr\u00e9er un formulaire frontal avec les champs personnalis\u00e9s avanc\u00e9s (ACF). Je vais d\u00e9tailler son fonctionnement et comment vous pouvez l&rsquo;adapter \u00e0 vos besoins.<\/p>\n<p><a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Advanced Custom Fields<\/a> (ACF) est un plugin gratuit qui vous aide \u00e0 ajouter des param\u00e8tres de champ de tout un tas de types \u00e0 presque tous les types de contenu dans WordPress. Vous pouvez ajouter des champs aux publications, aux taxonomies, aux menus, aux widgets, aux utilisateurs et m\u00eame aux pages d&rsquo;administration personnalis\u00e9es. Son utilisation principale est pour l&rsquo;administrateur, mais vous pouvez \u00e9galement l&rsquo;utiliser pour g\u00e9n\u00e9rer les champs en front-end.<\/p>\n<p>Les applications pour ajouter des champs ACF au front-end sont nombreuses ; vous pouvez ajouter un formulaire pour cr\u00e9er et mettre \u00e0 jour des publications, des cat\u00e9gories ou des utilisateurs. Avec du code, vous pouvez m\u00eame cr\u00e9er un formulaire de contact g\u00e9n\u00e9ral o\u00f9 les r\u00e9ponses sont enregistr\u00e9es en tant que messages de type de publication personnalis\u00e9s et le code d\u00e9clenche des notifications par e-mail sur les r\u00e9ponses au formulaire. Tout comme un formulaire de contact normal. L&rsquo;utilisation de la fonctionnalit\u00e9 de formulaire frontal ACF pour cr\u00e9er des formulaires et permettre aux visiteurs de cr\u00e9er ou de modifier le contenu du site sans se connecter sont les utilisations courantes. Mais utilisez-le avec prudence. Cela s&rsquo;ouvre facilement au spam et aux abus, et dans le pire des cas, les visiteurs peuvent d\u00e9truire le contenu ou les param\u00e8tres de votre site. Vous devriez au moins exiger que les visiteurs se connectent avec des utilisateurs valides afin d&rsquo;acc\u00e9der aux formulaires qui peuvent modifier le contenu critique de WordPress (profil utilisateur, publications, etc.).<\/p>\n<h2>Ce que nous ferons<\/h2>\n<p>Je suppose que le site WordPress a d\u00e9fini un ensemble de champs suppl\u00e9mentaires sur les utilisateurs d&rsquo;un r\u00f4le personnalis\u00e9 (&lsquo; <code>member<\/code>&lsquo;) \u00e0 l&rsquo;aide d&rsquo;ACF. Ces utilisateurs n&rsquo;ont pas du tout d&rsquo;acc\u00e8s administrateur, mais nous voulons leur offrir la possibilit\u00e9 de modifier leurs champs personnalis\u00e9s sur leur profil. La solution que j&rsquo;ai choisie consiste \u00e0 cr\u00e9er un mod\u00e8le de page personnalis\u00e9 pour mettre \u00e0 jour leur profil, en n&rsquo;affichant le formulaire que s&rsquo;ils sont connect\u00e9s et ont le bon r\u00f4le.<\/p>\n<p>Je vais le garder assez simple dans ce tutoriel donc je n&rsquo;inclurai pas d&rsquo;exemple d&rsquo;ajout des champs de profil utilisateur standard dans WordPress (email, mot de passe, etc.). Cela sort un peu du cadre de ce tutoriel. J&rsquo;autoriserai uniquement la modification des champs ACF sur cette page de profil de modification.<\/p>\n<p>Avec ACF, j&rsquo;ai cr\u00e9\u00e9 un groupe de champs avec un ensemble de param\u00e8tres pour les utilisateurs membres\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152752-61e4fa3424bfa.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152752-61e4fa3424bfa.png\" alt=\"Comment cr\u00e9er un formulaire frontal avec ACF\"><\/a><\/p>\n<p>Et j&rsquo;ai un mod\u00e8le de page personnalis\u00e9 dans mon th\u00e8me qui ressemble actuellement \u00e0 ceci &#8211; pour le moment, il ne s&rsquo;agit que d&rsquo;un mod\u00e8le de page simple et standard\u00a0;<\/p>\n<pre><code>&lt;?php \n\/* Template Name: ACF Profile Page *\/\nget_header(); ?&gt;\n&lt;main class=\"content\"&gt;\n    &lt;?php if (have_posts()) { \n        while (have_posts()): the_post(); ?&gt;\n        &lt;article id=\"post-&lt;?php the_ID() ?&gt;\" &lt;?php post_class(); ?&gt;&gt;\n            &lt;h2 class=\"page-title\"&gt;&lt;?php the_title(); ?&gt;&lt;\/h2&gt;\n            &lt;?php the_content(''); ?&gt;\n            &lt;?php \n            if (is_user_logged_in() &amp;&amp; current_user_can('member')) {\n                \/\/ Profile settings here\n            }\n            ?&gt;\n        &lt;\/article&gt;\n    &lt;?php endwhile;\n    } ?&gt;\n&lt;\/main&gt;\n&lt;?php \nget_sidebar();\nget_footer();<\/code><\/pre>\n<p>\u00c0 la ligne, <code>#11<\/code>nous v\u00e9rifions si l&rsquo;utilisateur actuel est connect\u00e9 et a le r\u00f4le personnalis\u00e9 <code>member<\/code>. Modifiez le r\u00f4le ou la r\u00e8gle minimale pour ce que vous souhaitez autoriser pour ce formulaire frontal. N&rsquo;oubliez pas que m\u00eame le r\u00f4le le plus bas dans WordPress, <code>subscriber<\/code>, a acc\u00e8s \u00e0 la modification de son profil dans le panneau d&rsquo;administration.<\/p>\n<p>Donc, en bref, nous voulons ajouter ces champs sur chaque membre sur cette page frontale personnalis\u00e9e :<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152752-61e4fa37478d8.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152752-61e4fa37478d8.png\" alt=\"Comment cr\u00e9er un formulaire frontal avec ACF\"><\/a><\/p>\n<h2>Fonctionnement des formulaires frontaux ACF<\/h2>\n<p>Vous devez ajouter deux appels de fonction dans le mod\u00e8le dont vous voulez le formulaire frontal\u00a0; <code>[acf_form_head](https:\/\/www.advancedcustomfields.com\/resources\/acf_form_head\/)()<\/code>et <code>[acf_form](https:\/\/www.advancedcustomfields.com\/resources\/acf_form\/)()<\/code>.<\/p>\n<p>La fonction <code>acf_form_head()<\/code>doit \u00eatre plac\u00e9e tout en haut de votre mod\u00e8le, avant toute sortie. Habituellement, dans un mod\u00e8le, cela signifie avant <code>[get_header](https:\/\/developer.wordpress.org\/reference\/functions\/get_header\/)()<\/code>. L&rsquo;appel de fonction s&rsquo;assure que tous les scripts et styles sont ajout\u00e9s afin que les champs ACF soient rendus correctement, ainsi que toutes les fonctionnalit\u00e9s de traitement, de validation et de soumission du travail. Nous n&rsquo;avons pas besoin d&rsquo;ajouter de param\u00e8tres \u00e0 cette fonction.<\/p>\n<p>La <code>acf_form()<\/code>fonction est celle qui rend le formulaire frontal et doit \u00eatre plac\u00e9e l\u00e0 o\u00f9 vous souhaitez que le formulaire apparaisse. Il accepte un tableau de param\u00e8tres. Nous devons au minimum indiquer quels champs ou groupes afficher et o\u00f9 les enregistrer.<\/p>\n<p>Lorsqu&rsquo;il s&rsquo;agit de d\u00e9cider quels champs afficher, vous fournissez g\u00e9n\u00e9ralement un groupe de champs (propri\u00e9t\u00e9 <code>field_groups<\/code>). Mais la <code>acf_form()<\/code>fonction prend \u00e9galement en charge la fourniture de champs uniques sp\u00e9cifiques (propri\u00e9t\u00e9 <code>fields<\/code>). Vous pouvez \u00e9galement fournir plusieurs champs ou groupes de champs pour les combiner dans le m\u00eame formulaire. \u00c0 cause de cela <code>field_groups<\/code>attend un tableau. Ainsi, m\u00eame si vous ne souhaitez afficher qu&rsquo;un seul groupe de champs, vous devez fournir cet ID ou ce slug dans un tableau.<\/p>\n<p>La deuxi\u00e8me propri\u00e9t\u00e9 obligatoire que vous devez fournir au formulaire <code>acf_form()<\/code>est l&rsquo;endroit \u00e0 partir duquel les donn\u00e9es doivent \u00eatre charg\u00e9es et o\u00f9 elles doivent \u00eatre enregistr\u00e9es, dans la propri\u00e9t\u00e9 <code>post_id<\/code>. Ne vous laissez pas berner par le nom \u00abposte \u00bb. Les r\u00e8gles pour <code>post_id<\/code>sont les m\u00eames lorsque vous utilisez <code>get_field()<\/code>, si vous \u00eates habitu\u00e9 \u00e0 travailler avec ACF auparavant. Si les champs sont destin\u00e9s \u00e0 une publication (publication, page, publication de type de publication personnalis\u00e9e), vous n&rsquo;avez qu&rsquo;\u00e0 fournir l&rsquo;ID ici. Mais si vous souhaitez charger et mettre \u00e0 jour des donn\u00e9es sur les utilisateurs, vous devez suivre ce format\u00a0: <code>user_{user ID}<\/code>. De m\u00eame avec les champs pour une cat\u00e9gorie: <code>category_{category ID}<\/code>. Consultez toutes les r\u00e8gles sous la rubrique &quot;Obtenir une valeur \u00e0 partir de diff\u00e9rents objets&quot; dans <a href=\"https:\/\/www.advancedcustomfields.com\/resources\/get_field\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la documentation d&rsquo;ACF sur<code>get_field()<\/code><\/a>.<\/p>\n<h2>Ajout du formulaire frontal ACF \u00e0 notre mod\u00e8le<\/h2>\n<p>Nous ajoutons <code>acf_form_head()<\/code>d&rsquo;abord le tout en haut, juste avant <code>get_header()<\/code>&#8211; mais apr\u00e8s la d\u00e9claration du mod\u00e8le de page (ligne <code>#3<\/code>). Ensuite, \u00e0 l&rsquo;endroit o\u00f9 nous voulons rendre le formulaire, nous ajoutons <code>acf_form()<\/code>deux propri\u00e9t\u00e9s.<\/p>\n<p>Nous devons trouver notre ID de groupe de champs. Si vous avez ajout\u00e9 le groupe de champs par code (j&rsquo;ai un <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/reference-complete-pour-lajout-de-groupes-de-champs-personnalises-avances-et-de-champs-par-code\/\" title=\"article qui explique en d\u00e9tail comment ajouter des champs ACF par code\">article qui explique en d\u00e9tail comment ajouter des champs ACF par code<\/a> ), vous avez d\u00e9j\u00e0 fourni un slug de groupe de champs. Vous fournissez ensuite le slug \u00e0 la <code>field_groups<\/code>propri\u00e9t\u00e9, dans un tableau. Si vous avez ajout\u00e9 le groupe de champs dans le panneau d&rsquo;administration, vous devez ouvrir le groupe dans le navigateur et v\u00e9rifier l&rsquo;URL. Nous sommes int\u00e9ress\u00e9s par l&rsquo;identifiant qui appara\u00eet apr\u00e8s &quot; <code>?post=<\/code>&quot;\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152752-61e4fa3a1621b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152752-61e4fa3a1621b.png\" alt=\"Comment cr\u00e9er un formulaire frontal avec ACF\"><\/a><\/p>\n<p>Dans mon exemple, l&rsquo;ID est <code>1145<\/code>. Alors c&rsquo;est ce que je fournis dans le tableau de <code>field_groups<\/code>.<\/p>\n<p>PS: Je ne recommande pas de coder en dur un ID car cet ID sera diff\u00e9rent dans chaque instance WordPress! Si vous travaillez sur une installation locale ainsi que sur un serveur interm\u00e9diaire et de production, je vous recommande vivement d&rsquo;ajouter les champs par code \u00e0 la place. De cette fa\u00e7on, vous pouvez d\u00e9finir un nom de groupe de champs et cela fonctionnera partout.<\/p>\n<p>En ce qui concerne la <code>post_id<\/code>propri\u00e9t\u00e9, je peux obtenir l&rsquo;ID utilisateur actuel \u00e0 l&rsquo;aide de la fonction WordPress <code>[get_current_user_id](https:\/\/developer.wordpress.org\/reference\/functions\/get_current_user_id\/)()<\/code>. Je concat\u00e8ne la cha\u00eene &lsquo; <code>user_<\/code>&lsquo; et le retour de cette fonction en tant que <code>post_id<\/code>.<\/p>\n<pre><code>&lt;?php \n\/* Template Name: ACF Profile Page *\/\nacf_form_head();\nget_header(); ?&gt;\n&lt;main class=\"content\"&gt;\n    &lt;?php if (have_posts()) { \n        while (have_posts()): the_post(); ?&gt;\n        &lt;article id=\"post-&lt;?php the_ID() ?&gt;\" &lt;?php post_class(); ?&gt;&gt;\n            &lt;h2 class=\"page-title\"&gt;&lt;?php the_title(); ?&gt;&lt;\/h2&gt;\n            &lt;?php the_content(''); ?&gt;\n            &lt;?php \n            if (is_user_logged_in() &amp;&amp; current_user_can('member')) {\n                $current_user_id = get_current_user_id();\n                acf_form([\n                    'field_groups' =&gt; [1145],\n                    'post_id' =&gt; 'user_'. $current_user_id\n                ]);\n            }\n            ?&gt;\n        &lt;\/article&gt;\n    &lt;?php endwhile;\n    } ?&gt;\n&lt;\/main&gt;\n&lt;?php \nget_sidebar();\nget_footer();<\/code><\/pre>\n<p>Et c&rsquo;est fondamentalement \u00e7a!<\/p>\n<p>Si je visite cette page en tant qu&rsquo;utilisateur membre, j&rsquo;obtiendrai les valeurs actuelles de cet utilisateur. Tous les types de champs ACF fonctionnent et semblent bons. Et je peux mettre \u00e0 jour les valeurs \u00e0 l&rsquo;aide du formulaire frontal et voir qu&rsquo;elles sont \u00e9galement mises \u00e0 jour dans l&rsquo;administration.<\/p>\n<h2>Personnaliser davantage le formulaire<\/h2>\n<p>Nous pouvons encore ajuster les param\u00e8tres pass\u00e9s \u00e0 <code>acf_form()<\/code>. Reportez-vous \u00e0 <a href=\"https:\/\/www.advancedcustomfields.com\/resources\/acf_form\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la documentation d&rsquo;ACF sur acf_form()<\/a> pour voir tous les param\u00e8tres possibles.<\/p>\n<p>Pour le moment, notre formulaire de profil utilisateur affiche &quot;Publier mis \u00e0 jour&quot; lorsque les param\u00e8tres sont soumis. Cela n&rsquo;a pas de sens pour les param\u00e8tres de profil. Nous pouvons personnaliser le message avec la propri\u00e9t\u00e9 <code>updated_message<\/code>.<\/p>\n<pre><code>acf_form([\n    'field_groups' =&gt; [1145],\n    'post_id' =&gt; 'user_'. $current_user_id,\n    'updated_message' =&gt; __('User profile updated.', 'txtdomain')\n]);<\/code><\/pre>\n<p>Si vous le souhaitez, vous pouvez d\u00e9finir une URL diff\u00e9rente vers laquelle rediriger apr\u00e8s la soumission du formulaire. Par d\u00e9faut, la m\u00eame page se recharge avec le param\u00e8tre GET &lsquo; <code>?updated=true<\/code>&lsquo;. Vous pouvez sp\u00e9cifier une URL sp\u00e9cifique vers une page de remerciement ou, si le formulaire est destin\u00e9 \u00e0 un message, vous souhaiterez peut-\u00eatre rediriger vers l&rsquo;affichage de ce message. Nous pouvons fournir l&rsquo;URL dans la propri\u00e9t\u00e9 <code>return<\/code>.<\/p>\n<pre><code>acf_form([\n    'field_groups' =&gt; [1145],\n    'post_id' =&gt; 'user_'. $current_user_id,\n    'return' =&gt; home_url('thank-you')\n]);<\/code><\/pre>\n<p>Si nous voulons un texte diff\u00e9rent sur le bouton de soumission du formulaire, nous pouvons le sp\u00e9cifier dans la propri\u00e9t\u00e9 <code>submit_value<\/code>.<\/p>\n<pre><code>acf_form([\n    'field_groups' =&gt; [1145],\n    'post_id' =&gt; 'user_'. $current_user_id,\n    'submit_value' =&gt; __('Update profile', 'txtdomain')\n]);<\/code><\/pre>\n<p>Vous pouvez \u00e9galement dire <code>acf_form()<\/code>de ne pas rendre la <code>&lt;form&gt;<\/code>balise. Si vous souhaitez combiner le formulaire d&rsquo;ACF avec votre propre formulaire personnalis\u00e9, vous pouvez d\u00e9finir et saisir le <code>form<\/code>et manuellement. Si vous faites cela, ACF pourra toujours mettre \u00e0 jour les valeurs, mais vous devez prendre soin de mettre \u00e0 jour tous les autres champs de votre formulaire personnalis\u00e9.<code>false``&lt;form&gt;``&lt;input type=\"submit\"\/&gt;<\/code><\/p>\n<pre><code>&lt;form method=\"POST\"&gt;\n    &lt;input type=\"text\" name=\"my-custom-input\" value=\"\" \/&gt;\n    &lt;?php\n    acf_form([\n        'field_groups' =&gt; [1145],\n        'post_id' =&gt; 'user_'. $current_user_id,\n        'form' =&gt; false\n    ]);\n    ?&gt;\n    &lt;input type=\"submit\" value=\"&lt;?php _e('Submit', 'txtdomain'); ?&gt;\" \/&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<h2>D\u00e9clencher des actions lors de la soumission de formulaires<\/h2>\n<p>Parfois, vous souhaiterez peut-\u00eatre d\u00e9clencher une fonction ou des \u00e9v\u00e9nements personnalis\u00e9s lorsqu&rsquo;un formulaire frontal est mis \u00e0 jour. Un exemple courant consiste \u00e0 \u00e9crire une fonction qui envoie une notification par e-mail \u00e0 chaque soumission de formulaire.<\/p>\n<p>Les champs personnalis\u00e9s avanc\u00e9s offrent deux crochets utiles lorsque les champs sont mis \u00e0 jour\u00a0; l&rsquo;action <code>[acf\/save_post](https:\/\/www.advancedcustomfields.com\/resources\/acf-save_post\/)<\/code>et le filtre <code>[acf\/pre_save_post](https:\/\/www.advancedcustomfields.com\/resources\/acf-pre_save_post\/)<\/code>. Encore une fois, ne vous laissez pas berner par le nom &quot;post&quot;. Ils sont d\u00e9clench\u00e9s pour toute mise \u00e0 jour des champs ACF, y compris les champs d&rsquo;un utilisateur, d&rsquo;une cat\u00e9gorie, d&rsquo;un menu, etc.<\/p>\n<p>Le filtre <code>acf\/pre_save_post<\/code>n&rsquo;est ex\u00e9cut\u00e9 <strong>que<\/strong> sur les formulaires frontaux utilisant <code>acf_form()<\/code>. En tant que param\u00e8tre de ce filtre, nous obtenons <code>post_id<\/code>, la m\u00eame valeur que celle que nous avons transmise ci <code>post_id<\/code>&#8211; <code>acf_form()<\/code>dessus. Le filtre s&rsquo;attend \u00e0 ce que vous reveniez <code>post_id<\/code>. N&rsquo;oubliez pas que nous devons analyser cela si nous ne faisons pas r\u00e9f\u00e9rence \u00e0 un ID de publication. Par exemple, pour l&rsquo;utilisateur, vous devez faire quelque chose comme\u00a0:<\/p>\n<pre><code>add_filter('acf\/pre_save_post', function($post_id) {\n    if (strpos($post_id, 'user_') === false) {\n        return $post_id;\n    }\n\u00a0\n    $user_id = intval(substr($post_id, 5));  \/\/ Extracts the user ID\n\u00a0\n    \/\/ Do your thing. You'll find the submitted values in $_POST\n\u00a0\n    return $post_id;\n});<\/code><\/pre>\n<p>Vous pouvez \u00e9galement utiliser le crochet <code>acf\/save_post<\/code>&#8211; mais rappelez-vous qu&rsquo;il est \u00e9galement d\u00e9clench\u00e9 dans l&rsquo;administration. En tant que param\u00e8tre de ce crochet, vous obtiendrez <code>post_id<\/code>, comme <code>acf\/pre_save_post<\/code>. Une chose importante \u00e0 retenir lors de l&rsquo;utilisation <code>acf\/save_post<\/code>est que vous pouvez utiliser la priorit\u00e9 du hook pour contr\u00f4ler si votre fonction est ex\u00e9cut\u00e9e avant l&rsquo;enregistrement des champs ou apr\u00e8s. Une fonction accroch\u00e9e \u00e0 la priorit\u00e9 10 ou sup\u00e9rieure sera d\u00e9clench\u00e9e apr\u00e8s l&rsquo;enregistrement des champs. Et une priorit\u00e9 inf\u00e9rieure \u00e0 10 sera d\u00e9clench\u00e9e avant qu&rsquo;ACF n&rsquo;enregistre les valeurs.<\/p>\n<pre><code>add_action('acf\/save_post', function($post_id) {\n    \/\/ You can fetch the values with standard get_field()\n});\n\u00a0\nadd_action('acf\/save_post', function($post_id) {\n    \/\/ You can access the submitted values in $_POST\n}, 8);<\/code><\/pre>\n<p>Lorsque vous avez accroch\u00e9 la fonction avant l&rsquo;enregistrement (priorit\u00e9 inf\u00e9rieure \u00e0 10), vous pouvez comparer les valeurs soumises avec ce qu&rsquo;ACF enregistrera. Vous pouvez faire <code>get_field()<\/code>pour obtenir la valeur actuelle et les comparer \u00e0 la valeur correspondante dans <code>$_POST<\/code>.<\/p>\n<p>Si vous voulez faire quelque chose uniquement lorsque les champs ont \u00e9t\u00e9 mis \u00e0 jour en front-end, vous pouvez simplement v\u00e9rifier si nous sommes en admin avec <code>[is_admin](https:\/\/developer.wordpress.org\/reference\/functions\/is_admin\/)()<\/code>. Vous trouverez ci-dessous un exemple de la mani\u00e8re dont vous proc\u00e9deriez pour configurer les notifications par e-mail lorsqu&rsquo;un utilisateur met \u00e0 jour ses param\u00e8tres dans le frontal\u00a0;<\/p>\n<pre><code>add_action('acf\/save_post', function($post_id) {\n    if (strpos($post_id, 'user_') === false) {\n        return $post_id;\n    }\n\u00a0\n    if (is_admin()) {\n        return;  \/\/ Bail if we are updating in admin\n    }\n\u00a0\n    $user_id = intval(substr($post_id, 5));\n\u00a0\n    \/\/ Use get_field() to get the saved\/submitted values if needed\n    \/\/ Then use wp_mail() to send an email\n});<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comment cr\u00e9er un formulaire frontal avec les champs personnalis\u00e9s avanc\u00e9s (ACF). Je vais d\u00e9tailler son fonctionnement et comment vous pouvez l&rsquo;adapter \u00e0 vos besoins.<\/p>\n","protected":false},"author":1,"featured_media":224889,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[717,717,832,1110,811,811,832,841,841,862,862],"tags":[1167],"class_list":["post-234236","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","category-guide-pour-les-debutants","category-n-a","category-plugins-2","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234236","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=234236"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234236\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/224889"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234236"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}