{"id":233875,"date":"2023-02-23T17:52:00","date_gmt":"2023-02-23T14:52:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233875"},"modified":"2022-11-11T12:56:15","modified_gmt":"2022-11-11T09:56:15","slug":"riferimento-completo-per-laggiunta-di-gruppi-di-campi-personalizzati-avanzati-e-campi-per-codice","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/riferimento-completo-per-laggiunta-di-gruppi-di-campi-personalizzati-avanzati-e-campi-per-codice\/","title":{"rendered":"Riferimento completo per l&#8217;aggiunta di gruppi di campi personalizzati avanzati e campi per codice"},"content":{"rendered":"\n<p>Il plug -in <a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Advanced Custom Fields<\/a> (ACF) supporta la configurazione completa di campi e gruppi in base al codice PHP nel tuo tema o plug-in. Il vantaggio di fare ci\u00f2 \u00e8 che tutti i tuoi campi saranno disponibili indipendentemente dall&#8217;istanza di WordPress su cui stai lavorando (ad esempio se devi passare da un server locale, di prova e un server live). Puoi impostare tutti i campi nell&#8217;amministratore di ACF e utilizzare lo strumento di esportazione per esportarlo in PHP.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151957-61e4d1b8bd642.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-151957-61e4d1b8bd642.png\" alt=\"Riferimento completo per l&#039;aggiunta di gruppi di campi personalizzati avanzati e campi per codice\" ><\/a><\/p>\n<p>Tuttavia, se lo fai frequentemente, potresti notare che l&#8217;esportazione PHP di ACF contiene molto codice che rende i tuoi file PHP non necessari. In alcuni casi \u00e8 meglio scrivere il codice da soli, con il minimo indispensabile, per un codice pi\u00f9 pulito nel tuo tema o plugin. Questa guida mira a fornire un riferimento completo su come scrivere manualmente aggiungendo campi e gruppi ACF in PHP. Tieni presente che non entrer\u00e0 nei dettagli di ciascun tipo di campo poich\u00e9 presuppone che tu abbia gi\u00e0 familiarit\u00e0 con i diversi campi possibili in ACF.<\/p>\n<h2>Ma prima; alcune precauzioni<\/h2>\n<p>Per mantenere buoni standard di codice e garantire che il tuo sito WordPress non vada in crash, dovresti sempre controllare se le funzioni o le classi utilizzate dal tuo codice esistono effettivamente. Soprattutto quando si tratta di plug-in che possono essere facilmente disattivati \u200b\u200bo nemmeno installati su un sito, dovresti sempre avvolgere il tuo codice specifico del plug-in in un if-test che controlli se le funzioni che utilizzi esistono, prima di utilizzarle.<\/p>\n<p>Come per ACF puoi farlo verificando se la classe <code>'acf'<\/code>esiste o se esiste la funzione per aggiungere campi e gruppi, <code>'acf_add_local_field_group'<\/code>,. Avvolgi uno di quelli attorno al codice seguente.<\/p>\n<pre><code>if (function_exists('acf_add_local_field_group')) {\n    \/\/ Your ACF specific code here\n}\n\/\/ OR:\nif (class_exists('acf')) {\n    \/\/ Your ACF specific code here\n}<\/code><\/pre>\n<h2>Codice scheletro<\/h2>\n<p>Per aggiungere meta box (gruppi) e campi utilizziamo l&#8217;hook chiamato <code>acf\/init<\/code>. All&#8217;interno della funzione chiamiamo la funzione <code>acf_add_local_field_group()<\/code>con un array come parametro. All&#8217;interno di quell&#8217;array c&#8217;\u00e8 la configurazione completa per il gruppo e tutti i suoi campi. I pi\u00f9 importanti sono le chiavi dell&#8217;array <code>'fields'<\/code>e <code>'location'<\/code>. Per la chiave dell&#8217;array <code>'fields'<\/code>si fornisce l&#8217;array per tutti i campi e per la chiave <code>'location'<\/code>si forniscono le impostazioni di dove dovrebbe apparire la metabox. Questo post entrer\u00e0 nel dettaglio delle possibili opzioni che hai per ciascuna di queste di seguito.<\/p>\n<p>Questo \u00e8 il minimo indispensabile per aggiungere un gruppo, a parte i campi e la posizione:<\/p>\n<pre><code>add_action('acf\/init', function() {\n    acf_add_local_field_group([\n        'key' =&gt; 'group_my_fields',\n        'title' =&gt; __('My fields', 'txtdomain'),\n        'label_placement' =&gt; 'top',\n        'menu_order' =&gt; 0,\n        'style' =&gt; 'default',\n        'position' =&gt; 'normal',\n        'fields' =&gt; [],\n        'location' =&gt; [],\n    ]);\n});<\/code><\/pre>\n<p>Ogni gruppo ha bisogno di una chiave univoca, ma il nome stesso non ha molta importanza (per noi). Se stai aggiungendo pi\u00f9 gruppi, non dimenticare di modificare il <code>'key'<\/code>campo. Il titolo della metabox pu\u00f2 essere impostato nell&#8217;elemento chiave dell&#8217;array, hai indovinato, <code>'title'<\/code>. Se stai aggiungendo pi\u00f9 metabox nella stessa posizione (ad es. durante la modifica del post), puoi controllare quale viene prima fornendo numeri diversi in <code>'menu_order'<\/code>.<\/p>\n<p>Puoi controllare il design del metabox fornendo uno dei due <code>default<\/code>eller <code>seamless<\/code>in <code>'style'<\/code>. Tuttavia, con il nuovo editore Gutenberg questo ha un significato molto meno importante. Lo stesso vale per la chiave <code>'position'<\/code>dove ai vecchi tempi si poteva posizionare il metabox sotto il contenuto del post (<code>'normal'<\/code>), sul lato (<code>'side'<\/code>) o subito dopo il titolo del post (<code>'acf_after_title'<\/code>).<\/p>\n<p>Bene! Immergiamoci nei due elementi pi\u00f9 interessanti dell&#8217;array; a partire dalla posizione \u2013 che definisce dove appare il metabox.<\/p>\n<h2>Posizione<\/h2>\n<p>Si tratta di ci\u00f2 che metti nella chiave <code>'location'<\/code>. Ma prima di esaminare le possibili opzioni, dobbiamo capire la sua struttura di array.<\/p>\n<p><code>'location'<\/code>accetta un array con un array di elementi in un array! Sostenere. S\u00ec, perch\u00e9 \u00e8 possibile fornire e combinare la logica AND e OR nella posizione (es. &quot;mostra nella modifica del post ma non se il tipo di post \u00e8 &#8216;libro&#8217;&quot;, oppure &quot;mostra nella schermata di modifica dell&#8217;utente e crea anche una nuova schermata dell&#8217;utente ma per entrambi i casi non se il ruolo corrente \u00e8 l&#8217;autore&quot;). Il modo in cui si indica se \u00e8 un AND o un OR \u00e8 strutturando gli array. \u00c8 molto pi\u00f9 facile da mostrare che da spiegare a parole:<\/p>\n<p>Ecco come combinare due elementi di posizione con la logica AND (entrambi devono essere veri):<\/p>\n<pre><code>'location' =&gt; [\n    [\n        [\n            \/\/ location 1\n        ],\n        [\n            \/\/ location 2\n        ]\n    ]\n]<\/code><\/pre>\n<p>E questo serve per combinare le posizioni con la logica OR (solo una deve essere vera):<\/p>\n<pre><code>'location' =&gt; [\n    [\n        [\n            \/\/ location 1\n        ]\n    ],\n    [\n        [\n            \/\/ location 2\n        ]\n    ]\n]<\/code><\/pre>\n<p>Vedi la differenza?<\/p>\n<p>OK, andiamo avanti. Ogni opzione di posizione consiste in una matrice di tre elementi; <code>'param'<\/code>che \u00e8 dove aggiungiamo tutte le diverse posizioni <code>'operator'<\/code>, e <code>'value'<\/code>. L&#8217;operatore \u00e8 come confrontare il valore e pu\u00f2 essere <code>'=='<\/code>uguale o <code>'!='<\/code>diverso a.<\/p>\n<p>Esaminiamo le possibili opzioni una per una.<\/p>\n<h3>Localit\u00e0 per tipo di posta<\/h3>\n<pre><code>[\n    'param' =&gt; 'post_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'post'\n]<\/code><\/pre>\n<p>Imposta il tipo di post desiderato in <code>'value'<\/code>. Tieni presente che non puoi fornire un array di pi\u00f9 tipi di post, devi combinare pi\u00f9 di questi array in una configurazione AND.<\/p>\n<h3>Posizione per stato del post<\/h3>\n<pre><code>[\n    'param' =&gt; 'post_status',\n    'operator' =&gt; '==',\n    'value' =&gt; 'publish'\n]<\/code><\/pre>\n<p>Imposta lo stato del post desiderato come <code>'value'<\/code>. Ancora una volta, tieni presente che non puoi fornire una matrice di pi\u00f9 stati dei post, dovrai fornire ogni valore desiderato in una configurazione AND o OR.<\/p>\n<h3>Posizione per modello di pagina<\/h3>\n<pre><code>[\n    'param' =&gt; 'page_template',\n    'operator' =&gt; '==',\n    'value' =&gt; 'template-name.php'\n]<\/code><\/pre>\n<p>Questo viene mostrato solo se la pagina selezionata (o il tipo di post personalizzato con supporto per il modello di pagina) ha scelto il nome del modello di pagina fornito.<\/p>\n<h3>Posizione per termine tassonomico assegnato<\/h3>\n<pre><code>\/\/ Post category only\n[\n    'param' =&gt; 'post_category',\n    'operator' =&gt; '==',\n    'value' =&gt; 'category:some-category-slug'\n]\n\/\/ Any taxonomy\n[\n    'param' =&gt; 'post_taxonomy',\n    'operator' =&gt; '==',\n    'value' =&gt; 'my_custom_taxonomy:some-category-slug'  \/\/ &lt;taxonomy name&gt;:&lt;term slug&gt;\n]<\/code><\/pre>\n<p>Questa posizione \u00e8 per quando a un post \u00e8 assegnato un termine specifico. Dovrai fornire il nome della tassonomia, i due punti e lo slug del termine come valore.<\/p>\n<h3>Posizione per tipo di pagina<\/h3>\n<p>ACF raggruppa le propriet\u00e0 speciali per le pagine come &quot;tipo di pagina&quot;. Riguarda principalmente il fatto che la pagina corrente sia o meno una pagina padre o figlio, ma anche per il targeting di pagine impostate come prima pagina di WordPress o pagina del blog.<\/p>\n<pre><code>\/\/ Front page\n[\n    'param' =&gt; 'page_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'front_page'\n]\n\/\/ Posts page\n[\n    'param' =&gt; 'page_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'posts_page'\n]\n\/\/ Top level page only\n[\n    'param' =&gt; 'page_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'top_level'\n]\n\/\/ Top level page that has children\n[\n    'param' =&gt; 'page_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'parent'\n]\n\/\/ Children level pages\n[\n    'param' =&gt; 'page_type',\n    'operator' =&gt; '==',\n    'value' =&gt; 'children'\n]<\/code><\/pre>\n<h3>Localit\u00e0: tassonomia<\/h3>\n<p>Una posizione per la modifica o l&#8217;aggiunta di un termine in una tassonomia.<\/p>\n<pre><code>[\n    'param' =&gt; 'taxonomy',\n    'operator' =&gt; '==',\n    'value' =&gt; 'category'  \/\/ Or 'all' for all taxonomies\n]<\/code><\/pre>\n<p>Fornisci il nome della tassonomia come <code>'value'<\/code>. Tieni presente che non puoi fornire una matrice di pi\u00f9 tassonomie, ma puoi fornire <code>'all'<\/code>come target tutte le tassonomie.<\/p>\n<h3>Localit\u00e0: utente<\/h3>\n<p>Questa posizione serve per aggiungere o modificare un profilo utente.<\/p>\n<pre><code>[\n    'param' =&gt; 'user_form',\n    'operator' =&gt; '==',\n    'value' =&gt; 'all'  \/\/ 'edit' || 'register'\n]<\/code><\/pre>\n<p>Fornire <code>'edit<\/code>&#8216; per indirizzare solo la schermata di modifica degli utenti esistenti, <code>'register'<\/code>per indirizzare solo il modulo quando si registra un nuovo utente, o &#8216; <code>all'<\/code>per entrambi i precedenti.<\/p>\n<h3>Posizione: voce di menu<\/h3>\n<p>Da ACF 5.6 puoi anche aggiungere gruppi di campi alle voci di menu.<\/p>\n<pre><code>[\n    'param' =&gt; 'nav_menu_item',\n    'operator' =&gt; '==',\n    'value' =&gt; 'all'\n]<\/code><\/pre>\n<p>Puoi impostare <code>value<\/code>per <code>all<\/code>applicare il gruppo a tutte le voci di menu oppure puoi specificare i menu per posizione (localit\u00e0 registrate nel tuo tema) o per ID menu. Per l&#8217;uso della posizione <code>'location\/&lt;name&gt;'<\/code>, quindi per una posizione denominata &#8216; <code>primary<\/code>&#8216; puoi impostare il valore su <code>'location\/primary'<\/code>per applicare il tuo gruppo a un menu assegnato solo a questa posizione. Se vuoi scegliere come target un ID menu specifico, imposta il valore su una stringa di quell&#8217;ID.<\/p>\n<h3>Posizione: widget<\/h3>\n<p>ACF ti fornisce anche una posizione all&#8217;interno delle impostazioni del widget senza modificare il codice del widget principale.<\/p>\n<pre><code>[\n    'param' =&gt; 'widget',\n    'operator' =&gt; '==',\n    'value' =&gt; 'tag_cloud'  \/\/ or 'all' for all widgets\n]<\/code><\/pre>\n<p>Puoi scegliere come target tutti i widget con <code>'all'<\/code>come <code>'value'<\/code>o scegliere come target un widget specifico. Sar\u00e0 necessario conoscere l'&#8221;ID interno&quot; del widget con cui sono registrati.<\/p>\n<h3>Posizione: pagina Opzioni ACF (solo Pro)<\/h3>\n<p>Con ACF Pro puoi utilizzare ACF per configurare pagine di amministrazione personalizzate.<\/p>\n<pre><code>[\n    'param' =&gt; 'options_page',\n    'operator' =&gt; '==',\n    'value' =&gt; 'acf-options-myoptionspage'\n]<\/code><\/pre>\n<p>Fornisci il nome che hai impostato in <code>acf_add_options_page<\/code>&#8216;s <code>menu_slug<\/code>as <code>'value'<\/code>.<\/p>\n<h3>Posizione: blocco (solo Pro 5.8+)<\/h3>\n<p>ACF Pro (5.8+) ha una funzione per aggiungere blocchi Gutenberg con campi di ACF e controllarne l&#8217;output con PHP. Abbastanza elegante per coloro che non si sono ancora tuffati nell&#8217;aggiunta di blocchi Gutenberg personalizzati e del Javascript richiesto.<\/p>\n<pre><code>[\n    'param' =&gt; 'block',\n    'operator' =&gt; '==',\n    'value' =&gt; 'acf\/cta'  \/\/ or 'all' for all ACF blocks\n]<\/code><\/pre>\n<hr \/>\n<h2>Campi<\/h2>\n<p>Ora entriamo nella parte pi\u00f9 interessante; i campi stessi. ACF offre una gamma (veramente) ampia di tipi di campo e lo ribadir\u00f2; questa guida non ti mostra cos&#8217;\u00e8 ogni campo e come funzionano o come appaiono.<\/p>\n<p>Nell&#8217;array principale fornito <code>'fields'<\/code>in <code>acf_add_local_field_group()<\/code>si fornisce un array in cui ogni campo \u00e8 il proprio array.<\/p>\n<p>Il minimo assoluto richiesto per ogni campo \u00e8 il seguente: un unico <code>'key'<\/code>che pu\u00f2 essere qualsiasi cosa tu voglia e probabilmente non avrai mai bisogno di farvi riferimento. Hai anche bisogno <code>'name'<\/code>di quale sia la meta chiave (post, utente, termine) in cui il valore del campo viene salvato come &#8211; e questa \u00e8 quella a cui ti riferirai quando ottieni il valore dei campi. Dovresti fornire un <code>'label'<\/code>e infine il cruciale <code>'type'<\/code>che definisce quale tipo di campo stiamo gestendo. Il resto dei campi dipende da <code>'type'<\/code>come vedremo quando esamineremo ogni tipo di campo di seguito.<\/p>\n<p>Questo \u00e8 il codice dello scheletro per aggiungere un campo.<\/p>\n<pre><code>'fields' = [\n    [\n        'key' =&gt; 'field_my_field',\n        'label' =&gt; __('My field', 'txtdomain'),\n        'name' =&gt; 'my_field',\n        'type' =&gt; 'text',\n    ]\n]<\/code><\/pre>\n<p>Tieni presente che avrai bisogno di quanto sopra per ogni campo, ma per non ripetere lo stesso codice, ogni tipo di campo sottostante includer\u00e0 solo <code>'type'<\/code>e qualsiasi altro elemento necessario per quel tipo di campo.<\/p>\n<h3>Campo: immissione di testo<\/h3>\n<p>Il campo pi\u00f9 semplice di tutti. Tutto ci\u00f2 di cui abbiamo veramente bisogno \u00e8:<\/p>\n<pre><code>[\n    'type' =&gt; 'text',\n]<\/code><\/pre>\n<p>Ma per personalizzare ulteriormente il tuo input di testo puoi anche fornire uno dei seguenti:<\/p>\n<pre><code>[\n    'default_value' =&gt; 'Default value',\n    'prepend' =&gt; 'Prepend text',\n    'append' =&gt; 'Appended text',\n]<\/code><\/pre>\n<h3>Campo: immissione del numero<\/h3>\n<pre><code>[\n    'type' =&gt; 'number',\n    'min' =&gt; 0,\n    'max' =&gt; 100,\n    'step' =&gt; 1,\n    'default_value' =&gt; 'Default value',\n    'prepend' =&gt; 'Prepend text',\n    'append' =&gt; 'Appended text',\n]<\/code><\/pre>\n<h3>Campo: Area di testo<\/h3>\n<pre><code>[\n    'type' =&gt; 'textarea',\n    'rows' =&gt; 5,\n    'new_lines' =&gt; 'wpautop',  \/\/ 'br' || ''\n    'default_value' =&gt; 'Default value',\n]<\/code><\/pre>\n<h3>Campo: dispositivo di scorrimento dell&#8217;intervallo<\/h3>\n<pre><code>[\n    'type' =&gt; 'range',\n    'min' =&gt; 0,\n    'max' =&gt; 100,\n    'step' =&gt; 1,\n    'default_value' =&gt; 50,\n    'prepend' =&gt; 'Prepend text',\n    'append' =&gt; 'Appended text',\n]<\/code><\/pre>\n<h3>Campo: Password<\/h3>\n<p>Come per l&#8217;immissione di testo, tranne per il fatto che tutto ci\u00f2 che digiti sar\u00e0 coperto da * come ti aspetteresti in un campo password.<\/p>\n<pre><code>[\n    'type' =&gt; 'password',\n    'prepend' =&gt; 'Prepend text',\n    'append' =&gt; 'Appended text',\n]<\/code><\/pre>\n<h3>Campo: immagine<\/h3>\n<p>Seleziona immagine singola.<\/p>\n<pre><code>[\n    'type' =&gt; 'image',\n    'return_format' =&gt; 'array',  \/\/ 'id' || 'url'\n    'preview_size' =&gt; 'thumbnail',\n]<\/code><\/pre>\n<h3>Campo: File<\/h3>\n<p>Simile all&#8217;immagine sopra, tranne per il fatto che non visualizza in anteprima il file.<\/p>\n<pre><code>[\n    'type' =&gt; 'file',\n    'return_format' =&gt; 'array',  \/\/ 'id' || 'url'\n]<\/code><\/pre>\n<p>Puoi anche fornirlo <code>'mime_types' =&gt; '',<\/code>e impostarlo, ad esempio, <code>'pdf,docx'<\/code>per consentire solo file PDF e DOCX.<\/p>\n<h3>Campo: Editor WYSIWYG<\/h3>\n<p>WYSIWYG \u00e8 un editor di &quot;What You See Is What You Get&quot;, quello che conoscevamo prima dell&#8217;arrivo di Gutenberg (TinyMCE).<\/p>\n<pre><code>[\n    'type' =&gt; 'wysiwyg',\n    'tabs' =&gt; 'all',  \/\/ 'visual' || 'text'\n    'toolbar' =&gt; 'full',  \/\/ 'basic'\n    'media_upload' =&gt; 1,\n    'delay' =&gt; 0,\n]<\/code><\/pre>\n<p>Il parametro <code>'media_upload'<\/code>e <code>'delay'<\/code>pu\u00f2 essere 1 (vero) o 0 (falso).<\/p>\n<h3>Campo: Seleziona<\/h3>\n<pre><code>[\n    'type' =&gt; 'select',\n    'allow_null' =&gt; 1,\n    'multiple' =&gt; 0,\n    'ui' =&gt; 1,\n    'return_format' =&gt; 'value',  \/\/ 'array' || 'label'\n    'choices' =&gt; [\n        'red' =&gt; __('Red color', 'txtdomain'),\n        'blue' =&gt; __('Blue color', 'txtdomain')\n    ],\n    'default_value' =&gt; 'red',\n]<\/code><\/pre>\n<h3>Campo: casella di controllo<\/h3>\n<pre><code>[\n    'type' =&gt; 'checkbox',\n    'layout' =&gt; 'horizontal',  \/\/ 'vertical'\n    'toggle' =&gt; 0,\n    'return_format' =&gt; 'value',  \/\/ 'array' || 'label'\n    'choices' =&gt; [\n        'red' =&gt; __('Red color', 'txtdomain'),\n        'blue' =&gt; __('Blue color', 'txtdomain')\n    ],\n    'default_value' =&gt; ['red'],\n    'allow_custom' =&gt; 1,\n    'save_custom' =&gt; 0,\n]<\/code><\/pre>\n<p>Nota che <code>'default_value'<\/code>pu\u00f2 essere una matrice di scelte multiple.<\/p>\n<h3>Campo: pulsante di opzione<\/h3>\n<pre><code>[\n    'type' =&gt; 'radio',\n    'layout' =&gt; 'horizontal',  \/\/ 'vertical'\n    'allow_null' =&gt; 0,\n    'return_format' =&gt; 'value',  \/\/ 'array' || 'label'\n    'choices' =&gt; [\n        'red' =&gt; __('Red color', 'txtdomain'),\n        'blue' =&gt; __('Blue color', 'txtdomain')\n    ],\n    'default_value' =&gt; 'red',\n    'other_choice' =&gt; 1,\n    'save_other_choice' =&gt; 0,\n]<\/code><\/pre>\n<p>L&#8217;impostazione <code>'other_choice'<\/code>su true aggiunge un pulsante di opzione aggiuntivo denominato &quot;Altro&quot; con un input di testo in cui l&#8217;utente pu\u00f2 digitare qualcosa.<\/p>\n<h3>Campo: Vero\/Falso (commuta)<\/h3>\n<pre><code>[\n    'type' =&gt; 'true_false',\n    'message' =&gt; __('Text after toggler', 'txtdomain'),\n    'default_value' =&gt; 1,\n    'ui' =&gt; 1,\n    'ui_on_text' =&gt; __('Yes', 'txtdomain'),\n    'ui_off_text' =&gt; __('No', 'txtdomain'),\n]<\/code><\/pre>\n<p>Il <code>'ui_on_text'<\/code>e <code>'ui_off_text'<\/code>\u00e8 valido solo se <code>'ui'<\/code>\u00e8 1, poich\u00e9 stanno definendo ci\u00f2 che dovrebbe apparire sullo speciale commutatore dell&#8217;interfaccia utente.<\/p>\n<h3>Campo: collegamento<\/h3>\n<p>Ti d\u00e0 un pulsante per inserire un collegamento, digitando o scegliendo dal contenuto del tuo sito WordPress (dovrebbe essere familiare aggiungendo un collegamento nel normale editor di WordPress).<\/p>\n<pre><code>[\n    'type' =&gt; 'link',\n    'return_format' =&gt; 'url',  \/\/ 'array'\n]<\/code><\/pre>\n<h3>Campo: Posta oggetto<\/h3>\n<p>Fornisce una casella di selezione in cui \u00e8 possibile scegliere tra i contenuti di WordPress. La selezione ti consente di cercare digitando e tutto il contenuto \u00e8 diviso per tipo di post. Puoi consentire la scelta di pi\u00f9 post o solo di uno.<\/p>\n<pre><code>[\n    'type' =&gt; 'post_object',\n    'allow_null' =&gt; 1,\n    'multiple' =&gt; 0,\n    'return_format' =&gt; 'object',  \/\/ 'id'\n    'post_type' =&gt; '',  \/\/ or array of post types e.g. ['post', 'page']\n    'taxonomy' =&gt; '',  \/\/ or array of terms e.g. ['category:term-slug']\n]<\/code><\/pre>\n<h3>Campo: Relazione<\/h3>\n<pre><code>[\n    'type' =&gt; 'relationship',\n    'return_format' =&gt; 'object',  \/\/ 'id'\n    'post_type' =&gt; '',  \/\/ or array of post types e.g. ['post', 'page']\n    'taxonomy' =&gt; '',  \/\/ or array of terms e.g. ['category:term-slug']\n    'elements' =&gt; ['featured_image'],  \/\/ or ''\n    'filters' =&gt; ['search', 'post_type', 'taxonomy'],\n]<\/code><\/pre>\n<h3>Campo: scegli i termini in una tassonomia<\/h3>\n<p>Il selettore dei termini della tassonomia ha quattro diverse &quot;modalit\u00e0&quot; o tipi in cui due di esse consentono scelte multiple.<\/p>\n<pre><code>[\n    'type' =&gt; 'taxonomy',\n    'return_format' =&gt; 'object',  \/\/ 'id'\n    'taxonomy' =&gt; 'category',\n    'field_type' =&gt; 'select',  \/\/ 'checkbox' || 'radio' || 'multi_select'\n    'add_term' =&gt; 0,\n    'save_terms' =&gt; 0,\n]<\/code><\/pre>\n<h3>Campo: Seleziona utente<\/h3>\n<pre><code>[\n    'type' =&gt; 'user',\n    'return_format' =&gt; 'array',  \/\/ 'object' || 'id\n    'role' =&gt; '',  \/\/ or array of roles, e.g. ['author']\n    'allow_null' =&gt; 1,\n    'multiple' =&gt; 0,\n]<\/code><\/pre>\n<h3>Campo: Google Maps<\/h3>\n<pre><code>[\n    'type' =&gt; 'google_map',\n    'center_lat' =&gt; '59.917',\n    'center_lng' =&gt; '10.727',\n    'zoom' =&gt; 14,\n    'height' =&gt; 350,\n]<\/code><\/pre>\n<p>Tieni presente che devi fornire una chiave API di GoogleMaps valida ad ACF affinch\u00e9 questo campo funzioni, in questo modo:<\/p>\n<pre><code>add_filter('acf\/fields\/google_map\/api', function($api) {\n    $api['key'] = 'YOURAPIKEY';\n    return $api;\n});<\/code><\/pre>\n<h3>Campo: Selettore data<\/h3>\n<pre><code>[\n    'type' =&gt; 'date_picker',\n    'display_format' =&gt; 'd\/m\/Y',\n    'return_format' =&gt; 'Y-m-d',\n    'first_day' =&gt; 1,\n]<\/code><\/pre>\n<h3>Campo: selettore data e ora<\/h3>\n<pre><code>[\n    'type' =&gt; 'date_time_picker',\n    'display_format' =&gt; 'd\/m\/Y H:i:s',\n    'return_format' =&gt; 'Y-m-d H:i:s',\n    'first_day' =&gt; 1,\n]<\/code><\/pre>\n<h3>Campo: Selettore tempo<\/h3>\n<pre><code>[\n    'type' =&gt; 'time_picker',\n    'display_format' =&gt; 'H:i',\n    'return_format' =&gt; H:i',\n]<\/code><\/pre>\n<h3>Campo: Selettore colore<\/h3>\n<pre><code>[\n    'type' =&gt; 'color_picker',\n    'default_value' =&gt; '',  \/\/ or any hex code, e.g. '#FFFFFF'\n]<\/code><\/pre>\n<h3>Campo: Galleria (solo ACF Pro)<\/h3>\n<pre><code>[\n    'type' =&gt; 'gallery',\n    'return_format' =&gt; 'array',  \/\/ 'id' || 'url'\n    'preview_size' =&gt; 'thumbnail',\n    'insert' =&gt; 'append',  \/\/ 'prepend'\n]<\/code><\/pre>\n<h3>Tipi speciali di campi<\/h3>\n<p>ACF offre anche alcuni tipi di campo che non salvano un valore di per s\u00e9, ma sono pi\u00f9 per scopi organizzativi. Per tutti questi impostati <code>'name'<\/code>su una stringa vuota.<\/p>\n<h4>Messaggio HTML<\/h4>\n<p>Se hai bisogno di stampare semplicemente del codice HTML senza che in realt\u00e0 salvi un valore, puoi usare type <code>'message'<\/code>.<\/p>\n<pre><code>[\n    'type' =&gt; 'message',\n    'message' =&gt; '&lt;p&gt;Your HTML here&lt;\/p&gt;',\n    'new_lines' =&gt; 'wpautop',\n    'esc_html' =&gt; 0,\n]<\/code><\/pre>\n<h4>Ripetitore (solo ACF Pro)<\/h4>\n<p>Un ripetitore contiene una serie di campi che possono essere ripetuti.<\/p>\n<pre><code>[\n    'type' =&gt; 'repeater',\n    'layout' =&gt; 'table',  \/\/ 'block' || 'row'\n    'button_label' =&gt; __('Add new', 'txtdomain'),\n    'sub_fields' =&gt; [],\n]<\/code><\/pre>\n<p>L&#8217;elemento <code>sub_fields<\/code>si aspetta una matrice di campi, proprio come hai impostato i campi sopra.<\/p>\n<h2>Conclusione<\/h2>\n<p>Questa non \u00e8 affatto una guida esauriente in quanto ACF offre una gamma cos\u00ec ampia di opzioni e personalizzazioni. Ma dovrebbe coprire le opzioni pi\u00f9 utilizzate e i casi d&#8217;uso personalizzati. Personalmente mi ritrovo a riferirmi a questo abbastanza spesso ogni volta che aggiungo campi ACF per i clienti. E anche per le opzioni pi\u00f9 strane questa guida \u00e8 sufficiente per non dover gonfiare i miei file PHP con il codice di esportazione di ACF. Spero che questo sia stato utile anche per te!<\/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>Un riferimento completo su come impostare correttamente campi e gruppi di campi personalizzati avanzati in base al codice PHP invece di incollare codice gonfio dallo strumento di esportazione PHP ACF.<\/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":[896,896,720,1110,814,814,720,844,844,865,865],"tags":[1168],"class_list":{"0":"post-233875","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-codice","9":"category-sviluppatore","10":"category-n-a","11":"category-plugin-2","14":"category-tutorial","16":"category-wordpress-6","18":"tag-affiai-it"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233875","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=233875"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233875\/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=233875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}