NB : Faire une sauvegarde de votre thème, de votre fichier et/ou votre base de données avant d’ajouter ces fonctions tutoriels.
Publié le : 01 octobre 2022 - Modifié le : 27 octobre 2022
Temps de lecture : 6 minutes, 33 seconds - 619 mots
Partager la publication "Remplir dynamiquement les choix de sélection – ACF"
Nous allons dans ce tutoriel, remplir dynamiquement les choix d’un champ de type sélection pour les types de posts personnalisés.
Nous allons utiliser, aujourd’hui, toute la beauté de l’extension WordPress ACF | Advanced Custom Fields
Cette extension très populaire, nous donne la possibilité de créer des champs personnalisés pour les articles, types d’articles, pages WordPress, et bien d’autres.
Créer des groupes de champs - ACF
On peut créer des groupes de champs et ajouter les champs souhaités dans ces groupes. Certains types de champs sont disponibles soit dans la version gratuite, soit dans la version Pro.
Par exemple le champ populaire Repeater est disponible dans la version Pro.
La liste des champs disponibles - ACF
Voici la liste des différents champs personnalisés dans la version gratuite et Pro.
Basique
- Texte
- Champs Texte
- Nombre
- Plage
- Courriel
- URL
- Mot de passe
Contenu
- Image
- Fichier
- Éditeur Wysiwyg
- Contenu oEmbed
- Galerie
Choix
- Liste déroulante
- Case à cocher
- Bouton radio
- Groupe de boutons
- Vrai/Faux
Relationnel
- Lien
- Objet de la publication
- Lien vers la page
- Relation
- Taxonomie
- Compte
JQuery
- Google Map
- Sélecteur de date
- Sélecteur de date et heure
- Sélecteur d’heure
- Sélecteur de couleur
Mise en page
- Message
- Accordéon
- Onglet
- Groupe
- Répéteur
- Contenu flexible
- Clone
Pour notre tutoriel, nous allons créer un nouveau groupe et ensuite ajouter un champ personnalisé de type sélection.
Ce groupe de champs, dans ses réglages peut être affiché où vous le souhaitez.
Cependant, dans ce champ, nous pouvons ajouter des valeurs personnalisées.
Ou bien afficher un résultat d’articles qui se retrouvera dans notre choix de sélection dynamiquement.
Afficher un résultat d'articles dans un champ sélection - ACF
En premier lieu, nous allons utiliser une WP Query, qui sera affichée dans un filtre du nom de acf/load_field/
Nous utilisons un argument name, qui est en réalité le nom dynamique du champ personnalisé ACF que vous avez créé. (acf/load_field/name=test)
Remplacez-le par votre nom de champ personnalisé ACF.
add_filter('acf/load_field/name=test', 'ThemespresspopulateActivites'); function ThemespresspopulateActivites($field) { $field['choices'] = array(); wp_reset_query(); $query = new WP_Query(array( 'post_type' => 'activites', 'order' => 'ASC', 'orderby' => 'title', 'posts_per_page' => -1, )); $field['choices'] = array(); foreach ($query->posts as $room_id => $matched_room) { $choices[$matched_room->ID] = $matched_room->post_title; } if (is_array($choices)) { foreach ($choices as $key => $choice) { $field['choices'][$key] = $choice; } } wp_reset_query(); return $field; }
Afficher un résultat d'articles dans un champ sélection - ACF - Multisite
Prenons le cas d’une WP Query dans un site web multisite, on va utiliser la fonction switch_to_blog
Dans notre requête, nous allons chercher l’ID du site web se trouvant dans le Multisite. (switch_to_blog(2))
Donc il affichera dans notre champ personnalisé, les articles du site web ayant comme ID 2, triés par titre et ASC.
Enfin, on change le nom du champ par le vôtre (acf/load_field/name=test)
add_filter('acf/load_field/name=test', 'ThemespresspopulateActivitesMultisite'); function ThemespresspopulateActivitesMultisite($field) { $field['choices'] = array(); wp_reset_query(); switch_to_blog(2); $querytwo = new WP_Query(array( 'post_type' => 'post', 'posts_per_page' => -1, 'order' => 'ASC', 'orderby' => 'title', )); $field['choices'] = array(); foreach ($querytwo->posts as $room_id => $matched_room) { $choices[$matched_room->ID] = $matched_room->post_title; } if (is_array($choices)) { foreach ($choices as $key => $choice) { $field['choices'][$key] = $choice; } } restore_current_blog(); return $field; }
Si nous souhaitons ne pas utiliser un champ utilisateur proposé par ACF, on peut aussi créer un champ de sélection et créer une requête permettant d’afficher les utilisateurs avec un rôle spécifique.
Vous pouvez changer le rôle dans l’exemple, et pourquoi pas ajouter d’autres rôles utilisateurs dans le array comme author, subscriber, editor, contributor.
add_filter('acf/load_field/name=partenaire', 'themepresspopulateUserGroups'); function themepresspopulateUserGroups( $field ){ // reset choices $field['choices'] = array(); $users = get_users(array( 'role__in' => array( 'partenaire' ) ) ); foreach ($users as $user) { $field['choices'][ $user->ID ] = $user->display_name; } return $field; }
Enfin, on change le nom du champ également : acf/load_field/name=partenaire
En conclusion, ACF – Advanced Custom Fields est une magnifique extension qui peut nous afficher nos magnifiques données reliées à nos articles, types d’articles, pages, ect …