{"id":234216,"date":"2023-02-14T17:51:00","date_gmt":"2023-02-14T14:51:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234216"},"modified":"2022-11-12T00:41:10","modified_gmt":"2022-11-11T21:41:10","slug":"comment-remplir-dynamiquement-les-parametres-de-champs-personnalises-avances","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-remplir-dynamiquement-les-parametres-de-champs-personnalises-avances\/","title":{"rendered":"Comment remplir dynamiquement les param\u00e8tres de champs personnalis\u00e9s avanc\u00e9s"},"content":{"rendered":"\n<p>Avec du code PHP, il est vraiment facile de remplir dynamiquement une valeur ou des choix <a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">de champs personnalis\u00e9s avanc\u00e9s (ACF).<\/a> Vous pouvez le faire pour tout type d&rsquo;entr\u00e9es, y compris les choix de radio, les cases \u00e0 cocher et autres. Dans cet article, nous verrons comment.<\/p>\n<h2>Le filtre<\/h2>\n<p>Les champs personnalis\u00e9s avanc\u00e9s proposent un filtre nomm\u00e9 <code>[acf\/load_field](https:\/\/www.advancedcustomfields.com\/resources\/acf-load_field\/)<\/code>. Vous pouvez utiliser ce filtre de plusieurs mani\u00e8res diff\u00e9rentes. Filtrez <code>acf\/load_field<\/code>pour l&rsquo;appliquer \u00e0 tous les types de champs ou incluez du code dans votre fonction hook\u00e9e pour d\u00e9terminer le type ou le nom de champ que vous voulez. Vous pouvez \u00e9galement sp\u00e9cifier le type de champ (<code>acf\/load_field\/type=&lt;type&gt;<\/code>), le nom (<code>acf\/load_field\/name=&lt;name&gt;<\/code>) ou la cl\u00e9 (<code>acf\/load_field\/key=&lt;key&gt;<\/code>).<\/p>\n<p>Supposons que nous cr\u00e9ons un champ de texte comme ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153292-61e50bc7809d8.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-153292-61e50bc7809d8.png\" alt=\"Comment remplir dynamiquement les param\u00e8tres de champs personnalis\u00e9s avanc\u00e9s\" ><\/a><\/p>\n<p>Nous pourrions cibler cela par <code>acf\/load_field\/name=dyn_pop_example<\/code>(cible uniquement ce champ sp\u00e9cifique), <code>acf\/load_field\/type=text<\/code>(s&rsquo;applique \u00e0 tous les champs de type texte) ou <code>acf\/load_field<\/code>(s&rsquo;applique \u00e0 tous les champs de n&rsquo;importe quel type ou nom). Lorsque vous utilisez les deux derniers filtres, vous pouvez bien s\u00fbr entrer dans la cible de la fonction par des informations de champ sp\u00e9cifiques, telles que le nom. Chaque champ d&rsquo;ACF re\u00e7oit \u00e9galement une cl\u00e9 unique, mais elles sont masqu\u00e9es et sont principalement destin\u00e9es \u00e0 l&rsquo;usage interne d&rsquo;ACF.<\/p>\n<p>Le filtre fournit une variable\u00a0; le tableau de champ. Ce tableau vous donne toutes les informations sur le champ en cours. Ce que vous faites, c&rsquo;est simplement changer les informations dans le tableau et renvoyer le tableau de champs modifi\u00e9. Selon le type de champ, les \u00e9l\u00e9ments du tableau diff\u00e8rent. Par exemple, les types de champs \u00e0 choix multiples tels que select et radioboxes auront un \u00e9l\u00e9ment de tableau &lsquo; <code>choices<\/code>&lsquo; que les champs de type texte, par exemple, n&rsquo;auront pas. Je vous recommande de faire une <code>var_dump()<\/code>analyse du tableau fourni pour voir \u00e0 quel type d&rsquo;informations vous avez acc\u00e8s.<\/p>\n<p>Commen\u00e7ons \u00e0 examiner du code r\u00e9el\u00a0!<\/p>\n<h2>Population: exemples simples<\/h2>\n<p>D\u00e9finir la valeur par d\u00e9faut d&rsquo;une entr\u00e9e de texte ressemblerait \u00e0 ceci\u00a0:<\/p>\n<pre><code>add_filter('acf\/load_field\/name=dyn_pop_example', function($field) {\n    $field['default_value'] = __('This is default value', 'txtdomain');\n    return $field;\n});<\/code><\/pre>\n<p>Nous ciblons notre entr\u00e9e de texte avec le nom <code>dyn_pop_example<\/code>et d\u00e9finissons sa valeur par d\u00e9faut (cl\u00e9 &lsquo; <code>default_value<\/code>&lsquo;) sur une cha\u00eene de notre choix. Le champ s&rsquo;affichera alors comme ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153292-61e50bc94e2b7.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-153292-61e50bc94e2b7.png\" alt=\"Comment remplir dynamiquement les param\u00e8tres de champs personnalis\u00e9s avanc\u00e9s\" ><\/a><\/p>\n<p>Vous pouvez modifier tous les param\u00e8tres du champ. Dans l&rsquo;exemple ci-dessous, nous d\u00e9finissons l&rsquo;espace r\u00e9serv\u00e9 et les instructions du texte\u00a0:<\/p>\n<pre><code>add_filter('acf\/load_field\/name=dyn_pop_example', function($field) {\n    $field['placeholder'] = __('Type in here', 'txtdomain');\n    $field['instructions'] = __('Some instructions coming from code', 'txtdomain');\n    return $field;\n});<\/code><\/pre>\n<p>Ce qui rendra le champ comme ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153292-61e50bcabf334.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-153292-61e50bcabf334.png\" alt=\"Comment remplir dynamiquement les param\u00e8tres de champs personnalis\u00e9s avanc\u00e9s\" ><\/a><\/p>\n<h2>Remplir les choix<\/h2>\n<p>Si vous souhaitez remplir dynamiquement les choix d&rsquo;un champ de s\u00e9lection, d&rsquo;option ou de case \u00e0 cocher, vous le faites dans l&rsquo;\u00e9l\u00e9ment de cl\u00e9 de tableau &lsquo; <code>choices<\/code>&lsquo;. Cet <code>choices<\/code>\u00e9l\u00e9ment &lsquo; &lsquo; s&rsquo;applique \u00e0 tous les champs de type select, radio et checkbox.<\/p>\n<p>L&rsquo; <code>choices<\/code>\u00e9l\u00e9ment &lsquo; &lsquo; doit \u00eatre un tableau de paires cl\u00e9 + valeur. Les cl\u00e9s sont les valeurs (qui seront enregistr\u00e9es) et les valeurs sont l&rsquo;\u00e9tiquette qui appara\u00eet comme choix.<\/p>\n<p>Supposons que nous modifions notre champ en select. Vous pouvez laisser les choix vides car ils seront d\u00e9finis via notre code.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153292-61e50bcc5cf44.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-153292-61e50bcc5cf44.png\" alt=\"Comment remplir dynamiquement les param\u00e8tres de champs personnalis\u00e9s avanc\u00e9s\" ><\/a><\/p>\n<p>Pour remplir les choix de la s\u00e9lection, nous proc\u00e9dons comme ceci\u00a0:<\/p>\n<pre><code>add_filter('acf\/load_field\/name=dyn_pop_example', function($field) {\n    $choices = [\n        'red' =&gt; __('Red Color', 'txtdomain'),\n        'blue' =&gt; __('Blue Color', 'txtdomain'),\n        'green' =&gt; __('Green Color', 'txtdomain')\n    ];\n    $field['choices'] = $choices;\n    $field['default_value'] = 'blue';\n    return $field;\n});<\/code><\/pre>\n<p>\u00c0 la ligne, <code>#2 - #6<\/code>nous d\u00e9finissons simplement un tableau de choix. Modifiez-le selon vos besoins. \u00c0 la ligne, <code>#7<\/code>nous attribuons les choix du champ \u00e0 notre tableau. Pour faire bonne mesure, nous d\u00e9finissons \u00e9galement la valeur par d\u00e9faut du champ. Ce n&rsquo;est pas n\u00e9cessaire &#8211; sans ligne, <code>#8<\/code>la s\u00e9lection choisirait simplement automatiquement le premier choix dans le tableau (&quot;rouge&quot;).<\/p>\n<p>Le code ci-dessus rendra le champ comme ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153292-61e50bce2ff52.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-153292-61e50bce2ff52.png\" alt=\"Comment remplir dynamiquement les param\u00e8tres de champs personnalis\u00e9s avanc\u00e9s\" ><\/a><\/p>\n<p>Les choix vous appartiennent, tout ce dont vous avez besoin est de fournir un tableau cl\u00e9 + valeur appropri\u00e9 \u00e0 l&rsquo; <code>choices<\/code>\u00e9l\u00e9ment &lsquo; &lsquo; du champ. \u00c0 titre d&rsquo;exemple de base, cet exemple de code montre comment vous pouvez transformer un champ de s\u00e9lection normal en un choix de publications.<\/p>\n<pre><code>add_filter('acf\/load_field\/name=dyn_pop_example', function($field) {\n    $posts = new WP_Query([\n        'post_type' =&gt; 'page',\n        'posts_per_page' =&gt; -1\n    ]);\n    $choices = [];\n    while ($posts-&gt;have_posts()) { \n        $posts-&gt;the_post();\n        $choices[get_the_ID()] = get_the_title();\n    }\n    wp_reset_query();\n    $field['choices'] = $choices;\n    return $field;\n});<\/code><\/pre>\n<p>L&rsquo;exemple de code ci-dessus cr\u00e9e une requ\u00eate de publication r\u00e9cup\u00e9rant toutes les pages et remplit le tableau de choix avec les ID de publication en tant que cl\u00e9s et les titres de publication en tant que valeurs. Ceci est juste \u00e0 titre d&rsquo;exemple; si vous allez faire un choix de postes ACF propose d&rsquo;autres types de champs sp\u00e9cifiquement pour cela.<\/p>\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>Avec PHP, il est vraiment facile de remplir dynamiquement n&rsquo;importe quel type de valeur ou de choix de champ Advanced Custom Fields (ACF). Dans cet article, nous verrons comment.<\/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":[915,893,893,717,717,832,915,1110,832,841,841,862,862],"tags":[1167],"class_list":{"0":"post-234216","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-autre","8":"category-code-2","10":"category-developpeur","12":"category-guide-pour-les-debutants","14":"category-n-a","16":"category-tutoriels","18":"category-wordpress-3","20":"tag-affiai-fr"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234216","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=234216"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234216\/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=234216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}