NB : Faire une sauvegarde de votre thème, de votre fichier et/ou votre base de données avant d’ajouter ces fonctions tutoriels.

Difficile

---- Cet article a été modifié : 27 octobre 2022

Temps de lecture : 6 minutes, 33 seconds - 619 mots

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.

Advanced Custom Fields - Extension WordPress

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é vous le souhaitez.

Réglages ACF pour un groupe de champs personnalisés

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

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 …

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>