Hur man dynamiskt fyller i avancerade anpassade fältinställningar
Med lite PHP-kod är det verkligen enkelt att dynamiskt fylla i ett eller flera val av Advanced Custom Fields (ACF). Du kan göra detta för alla typer av ingångar, inklusive val av radio, kryssrutor och liknande. I det här inlägget ska vi titta på hur.
Filtret
Avancerade anpassade fält erbjuder ett filter som heter [acf/load_field](https://www.advancedcustomfields.com/resources/acf-load_field/). Du kan använda detta filter på flera olika sätt. Antingen filter acf/load_fieldför att tillämpa det på alla typer av fält eller inkludera kod i din kopplade funktion för att ta reda på vilken fälttyp eller namn du vill ha. Eller så kan du ange antingen fälttyp (acf/load_field/type=<type>), namn (acf/load_field/name=<name>) eller nyckel (acf/load_field/key=<key>).
Anta att vi skapar ett textfält så här:
Vi skulle kunna rikta in oss på detta med acf/load_field/name=dyn_pop_example(riktar endast på detta specifika fält), acf/load_field/type=text(gäller alla fält av typtext) eller acf/load_field(gäller alla fält av vilken typ eller namn som helst). När du använder de två sista filtren kan du givetvis inuti funktionen rikta in dig på specifik fältinformation, såsom namn. Varje fält i ACF får också en unik nyckel, men de är dolda och är mestadels för ACF:s internt bruk.
Filtret tillhandahåller en variabel; fältarrayen. Denna array ger dig all information om det aktuella fältet. Vad du gör är att helt enkelt ändra informationen i arrayen och returnera den modifierade fältarrayen. Beroende på typen av fält skiljer sig elementen i arrayen åt. Till exempel kommer flervalsfälttyper som select och radioboxar att ha ett arrayelement ’ choices’ som fält av t.ex. typtext inte kommer att ha. Jag rekommenderar att du gör en var_dump()av den tillhandahållna arrayen för att se vilken typ av information du har tillgång till.
Låt oss börja titta på lite faktisk kod!
Befolkning: enkla exempel
Att ställa in standardvärdet för en textinmatning skulle se ut ungefär så här:
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$field['default_value'] = __('This is default value', 'txtdomain');
return $field;
});
Vi riktar in vår textinmatning med namnet dyn_pop_exampleoch ställer in dess standardvärde (nyckel ’ default_value’) till en sträng som vi själva väljer. Fältet kommer då att återges så här:
Du kan ändra alla inställningar i fältet. I exemplet nedan ställer vi in textens platshållare och instruktioner:
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$field['placeholder'] = __('Type in here', 'txtdomain');
$field['instructions'] = __('Some instructions coming from code', 'txtdomain');
return $field;
});
Vilket gör att fältet återges så här:
Befolka val
Om du dynamiskt vill fylla i valen för ett markerings-, radio- eller kryssrutefält, gör du detta i array-nyckelelementet ’ choices’. Detta ’ choices’ element gäller för alla fält av typ select, radio och checkbox.
Elementet ’ choices’ måste vara en matris med nyckel + värdepar. Nycklarna är värdena (som kommer att sparas) och värdena är etiketten som visas som valet.
Antag att vi ändrar vårt fält till ett urval. Du kan lämna valen tomma eftersom de ställs in via vår kod.
För att fylla i de utvalda valen gör vi så här:
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$choices = [
'red' => __('Red Color', 'txtdomain'),
'blue' => __('Blue Color', 'txtdomain'),
'green' => __('Green Color', 'txtdomain')
];
$field['choices'] = $choices;
$field['default_value'] = 'blue';
return $field;
});
På linjen #2 - #6definierar vi helt enkelt en mängd val. Ändra detta efter dina behov. På line #7tilldelar vi fältets val till vår array. För godo anger vi också fältets standardvärde. Detta är inte nödvändigt – utan linje #8skulle select helt enkelt automatiskt välja det första valet i arrayen (’röd’).
Ovanstående kod kommer att göra fältet så här:
Valen är upp till dig, allt du behöver ta hand om är att tillhandahålla en korrekt nyckel + värde array till fältets ’ choices’ element. Som ett grundläggande exempel visar detta kodexempel hur du kan förvandla ett normalt urvalsfält till ett urval av inlägg.
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$posts = new WP_Query([
'post_type' => 'page',
'posts_per_page' => -1
]);
$choices = [];
while ($posts->have_posts()) {
$posts->the_post();
$choices[get_the_ID()] = get_the_title();
}
wp_reset_query();
$field['choices'] = $choices;
return $field;
});
Kodexemplet ovan gör en inläggsfråga som hämtar alla sidor och fyller valmatrisen med inläggs-ID:n som nycklar och posttitlarna som värden. Detta är bara som ett exempel; om du ska göra ett val av inlägg erbjuder ACF andra fälttyper specifikt för detta.




