Avec du code PHP, il est vraiment facile de remplir dynamiquement une valeur ou des choix de champs personnalisés avancés (ACF). Vous pouvez le faire pour tout type d’entrées, y compris les choix de radio, les cases à cocher et autres. Dans cet article, nous verrons comment.
Le filtre
Les champs personnalisés avancés proposent un filtre nommé [acf/load_field](https://www.advancedcustomfields.com/resources/acf-load_field/). Vous pouvez utiliser ce filtre de plusieurs manières différentes. Filtrez acf/load_fieldpour l’appliquer à tous les types de champs ou incluez du code dans votre fonction hookée pour déterminer le type ou le nom de champ que vous voulez. Vous pouvez également spécifier le type de champ (acf/load_field/type=<type>), le nom (acf/load_field/name=<name>) ou la clé (acf/load_field/key=<key>).
Supposons que nous créons un champ de texte comme ceci :
Nous pourrions cibler cela par acf/load_field/name=dyn_pop_example(cible uniquement ce champ spécifique), acf/load_field/type=text(s’applique à tous les champs de type texte) ou acf/load_field(s’applique à tous les champs de n’importe quel type ou nom). Lorsque vous utilisez les deux derniers filtres, vous pouvez bien sûr entrer dans la cible de la fonction par des informations de champ spécifiques, telles que le nom. Chaque champ d’ACF reçoit également une clé unique, mais elles sont masquées et sont principalement destinées à l’usage interne d’ACF.
Le filtre fournit une variable ; le tableau de champ. Ce tableau vous donne toutes les informations sur le champ en cours. Ce que vous faites, c’est simplement changer les informations dans le tableau et renvoyer le tableau de champs modifié. Selon le type de champ, les éléments du tableau diffèrent. Par exemple, les types de champs à choix multiples tels que select et radioboxes auront un élément de tableau ‘ choices‘ que les champs de type texte, par exemple, n’auront pas. Je vous recommande de faire une var_dump()analyse du tableau fourni pour voir à quel type d’informations vous avez accès.
Commençons à examiner du code réel !
Population: exemples simples
Définir la valeur par défaut d’une entrée de texte ressemblerait à ceci :
add_filter('acf/load_field/name=dyn_pop_example', function($field) {
$field['default_value'] = __('This is default value', 'txtdomain');
return $field;
});
Nous ciblons notre entrée de texte avec le nom dyn_pop_exampleet définissons sa valeur par défaut (clé ‘ default_value‘) sur une chaîne de notre choix. Le champ s’affichera alors comme ceci :
Vous pouvez modifier tous les paramètres du champ. Dans l’exemple ci-dessous, nous définissons l’espace réservé et les instructions du texte :
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;
});
Ce qui rendra le champ comme ceci :
Remplir les choix
Si vous souhaitez remplir dynamiquement les choix d’un champ de sélection, d’option ou de case à cocher, vous le faites dans l’élément de clé de tableau ‘ choices‘. Cet choicesélément ‘ ‘ s’applique à tous les champs de type select, radio et checkbox.
L’ choicesélément ‘ ‘ doit être un tableau de paires clé + valeur. Les clés sont les valeurs (qui seront enregistrées) et les valeurs sont l’étiquette qui apparaît comme choix.
Supposons que nous modifions notre champ en select. Vous pouvez laisser les choix vides car ils seront définis via notre code.
Pour remplir les choix de la sélection, nous procédons comme ceci :
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;
});
À la ligne, #2 - #6nous définissons simplement un tableau de choix. Modifiez-le selon vos besoins. À la ligne, #7nous attribuons les choix du champ à notre tableau. Pour faire bonne mesure, nous définissons également la valeur par défaut du champ. Ce n’est pas nécessaire – sans ligne, #8la sélection choisirait simplement automatiquement le premier choix dans le tableau ("rouge").
Le code ci-dessus rendra le champ comme ceci :
Les choix vous appartiennent, tout ce dont vous avez besoin est de fournir un tableau clé + valeur approprié à l’ choicesélément ‘ ‘ du champ. À titre d’exemple de base, cet exemple de code montre comment vous pouvez transformer un champ de sélection normal en un choix de publications.
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;
});
L’exemple de code ci-dessus crée une requête de publication récupérant toutes les pages et remplit le tableau de choix avec les ID de publication en tant que clés et les titres de publication en tant que valeurs. Ceci est juste à titre d’exemple; si vous allez faire un choix de postes ACF propose d’autres types de champs spécifiquement pour cela.




