{"id":233486,"date":"2023-02-14T17:25:00","date_gmt":"2023-02-14T14:25:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233486"},"modified":"2022-11-10T23:57:50","modified_gmt":"2022-11-10T20:57:50","slug":"come-popolare-dinamicamente-le-impostazioni-dei-campi-personalizzati-avanzati","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/come-popolare-dinamicamente-le-impostazioni-dei-campi-personalizzati-avanzati\/","title":{"rendered":"Come popolare dinamicamente le impostazioni dei campi personalizzati avanzati"},"content":{"rendered":"\n<p>Con del codice PHP \u00e8 davvero facile popolare dinamicamente un valore o scelte ACF (<a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Advanced Custom Fields ).<\/a> Puoi farlo per qualsiasi tipo di input, comprese le scelte di radio, checkbox e simili. In questo post vedremo come.<\/p>\n<h2>Il filtro<\/h2>\n<p>Advanced Custom Fields offre un filtro denominato <code>[acf\/load_field](https:\/\/www.advancedcustomfields.com\/resources\/acf-load_field\/)<\/code>. \u00c8 possibile utilizzare questo filtro in diversi modi. O filtra <code>acf\/load_field<\/code>per applicarlo a tutti i tipi di campi o includi il codice all&#8217;interno della tua funzione agganciata per capire quale tipo di campo o nome desideri. Oppure puoi specificare il tipo di campo (<code>acf\/load_field\/type=&lt;type&gt;<\/code>), il nome (<code>acf\/load_field\/name=&lt;name&gt;<\/code>) o la chiave (<code>acf\/load_field\/key=&lt;key&gt;<\/code>).<\/p>\n<p>Supponiamo di creare un campo di testo in questo modo:<\/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=\"Come popolare dinamicamente le impostazioni dei campi personalizzati avanzati\" ><\/a><\/p>\n<p>Potremmo scegliere come target <code>acf\/load_field\/name=dyn_pop_example<\/code>(mira solo a questo campo specifico), <code>acf\/load_field\/type=text<\/code>(si applica a tutti i campi di tipo testo) o <code>acf\/load_field<\/code>(si applica a tutti i campi di qualsiasi tipo o nome). Quando si utilizzano gli ultimi due filtri \u00e8 ovviamente possibile all&#8217;interno della funzione target tramite informazioni di campo specifiche, come il nome. Ogni campo in ACF ottiene anche una chiave univoca, ma sono nascosti e sono principalmente per uso interno di ACF.<\/p>\n<p>Il filtro fornisce una variabile; la matrice del campo. Questa matrice fornisce tutte le informazioni sul campo corrente. Quello che fai \u00e8 semplicemente cambiare le informazioni nell&#8217;array e restituire l&#8217;array del campo modificato. A seconda del tipo di campo, gli elementi nell&#8217;array differiscono. Ad esempio, i tipi di campo a scelta multipla come select e radiobox avranno un elemento array &#8216; <code>choices<\/code>&#8216; che i campi ad esempio di tipo text non avranno. Ti consiglio di eseguire uno <code>var_dump()<\/code>degli array forniti per vedere a quale tipo di informazioni hai accesso.<\/p>\n<p>Iniziamo a esaminare un po&#8217; di codice reale!<\/p>\n<h2>Popolazione: semplici esempi<\/h2>\n<p>L&#8217;impostazione del valore predefinito di un input di testo sarebbe simile a questa:<\/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>Indirizziamo il nostro input di testo con il nome <code>dyn_pop_example<\/code>e impostiamo il suo valore predefinito (chiave &#8216; <code>default_value<\/code>&#8216;) su una stringa di nostra scelta. Il campo verr\u00e0 quindi visualizzato in questo modo:<\/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=\"Come popolare dinamicamente le impostazioni dei campi personalizzati avanzati\" ><\/a><\/p>\n<p>\u00c8 possibile modificare qualsiasi impostazione nel campo. Nell&#8217;esempio seguente impostiamo il segnaposto e le istruzioni del testo:<\/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>Il che render\u00e0 il campo in questo modo:<\/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=\"Come popolare dinamicamente le impostazioni dei campi personalizzati avanzati\" ><\/a><\/p>\n<h2>Popola le scelte<\/h2>\n<p>Se vuoi popolare dinamicamente le scelte di un campo select, radio o checkbox, fallo nell&#8217;elemento chiave dell&#8217;array &#8216; <code>choices<\/code>&#8216;. Questo <code>choices<\/code>elemento &#8216; &#8216; si applica a tutti i campi di tipo select, radio e checkbox.<\/p>\n<p>L&#8217; <code>choices<\/code>elemento &#8216; &#8216; deve essere un array di coppie chiave + valore. Le chiavi sono i valori (che verranno salvati) ei valori sono l&#8217;etichetta che compare come scelta.<\/p>\n<p>Supponiamo di cambiare il nostro campo in un select. Puoi lasciare le scelte vuote in quanto verranno impostate tramite il nostro codice.<\/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=\"Come popolare dinamicamente le impostazioni dei campi personalizzati avanzati\" ><\/a><\/p>\n<p>Per popolare le scelte di select lo facciamo in questo modo:<\/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>In linea <code>#2 - #6<\/code>definiamo semplicemente una serie di scelte. Modificalo in base alle tue esigenze. Alla riga <code>#7<\/code>assegniamo le scelte del campo al nostro array. Per buona misura, impostiamo anche il valore predefinito del campo. Questo non \u00e8 necessario: senza linea, <code>#8<\/code>select sceglierebbe automaticamente la prima scelta nell&#8217;array (&quot;rosso&quot;).<\/p>\n<p>Il codice sopra render\u00e0 il campo in questo modo:<\/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=\"Come popolare dinamicamente le impostazioni dei campi personalizzati avanzati\" ><\/a><\/p>\n<p>Le scelte spettano a te, tutto ci\u00f2 di cui devi occuparti \u00e8 fornire una corretta matrice chiave + valore <code>choices<\/code>all&#8217;elemento &#8216; &#8216; del campo. Come esempio di base, questo esempio di codice mostra come trasformare un normale campo di selezione in una scelta di post.<\/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&#8217;esempio di codice sopra crea una query di post che recupera tutte le pagine e popola l&#8217;array di scelta con ID post come chiavi e titoli di post come valori. Questo \u00e8 solo un esempio; se hai intenzione di scegliere i post, ACF offre altri tipi di campo appositamente per questo.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Con PHP \u00e8 davvero facile popolare dinamicamente qualsiasi tipo di valore o scelta di campo Advanced Custom Fields (ACF). In questo post vedremo come.<\/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":[918,896,896,720,835,918,1110,835,720,844,844,865,865],"tags":[1168],"class_list":{"0":"post-233486","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-altro","8":"category-codice","10":"category-sviluppatore","11":"category-guida-per-principianti","13":"category-n-a","16":"category-tutorial","18":"category-wordpress-6","20":"tag-affiai-it"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233486","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=233486"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233486\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/224889"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233486"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233486"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233486"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}