Ajouter des champs ACF comme colonne dans l’admin WordPress

Ajouter des champs ACF comme colonne dans l’admin WordPress
WordPress Lecture 5 minutes • 9 juillet 2023

Aujourd'hui, nous allons voir comment ajouter des champs ACF aux colonnes d'administration de WordPress.

En tant que développeurs, nous voulons limiter au maximum le nombre d 'extensions/plug-ins que nous utilisons, c'est pourquoi nous allons simplement ajouter la fonctionnalité manuellement en 2 étapes !

Colonnes personnalisées dans l'admin WP, la démonstration par l'exemple

Pour l'exemple, nous présentons sur notre site des hébergements ayant chacun une capacité d'accueil (nbr de personnes) et une région d'affectation.

Disons que vous avez créé un type de publication, "hébergement", et deux champs ACF :

- "hebergement_capacite"
- "hebergement_region"

Nous allons maintenant ajouter les deux champs en tant que colonnes dans l'admin de notre CPT "hébergement". Voici le résultat attendu en image !

Ajouter colonnes ACF à l'admin de WordPress

1/ Créer les deux nouvelles colonnes "Nombre de personnes" et "Région" dans l'admin

Ajouter ce qui suit au fichier functions.php de votre thème :

/**
*** Créé les colonnes ACF dans l'admin
**/

$post_type = 'hebergement';

 function ajout_acf_colonnes ( $columns ) {
   return array_merge ( $columns, array ( 
     'colonne_capacite' => __ ( 'Nombre de personnes' ),
     'colonne_region'   => __ ( 'Région' ) 
   ) );
 }
 add_filter ( "manage_{$post_type}_posts_columns", 'ajout_acf_colonnes' );

Comment adapter ce code à votre cas ?

  • Ligne 5, remplacer "hebergement" par l'identifiant/slug de votre CPT
  • Lignes 9 et 10, remplacer "colonne_capacite" et "colonne_region" par les slugs et noms de vos choix

2/ Lier les valeurs des champs ACF des hébergements à ces colonnes

Ajouter ensuite, le code ci-dessous à la suite dans le fichier functions.php de votre thème :

/*
** Affecte les colonnes au CPT Hébergement et affiche les valeurs
*/

 function hebergement_custom_column ( $column, $post_id ) {

   switch ( $column ) {
     case 'colonne_capacite':
       echo get_post_meta ( $post_id, 'hebergement_capacite', true );
       break;
     case 'colonne_region':
       echo get_post_meta ( $post_id, 'hebergement_region', true );
       break;
   }
}
add_action ( "manage_{$post_type}_posts_custom_column", 'hebergement_custom_column', 10, 2 );

Comment adapter ce code à votre cas ?

  • Lignes 8 et 11, on reprends les deux slugs créés précédemment ("colonne_capacite" et "colonne_region")
  • Lignes 9 et 12, remplacer "hebergement_capacite" et "hebergement_region" par les identifiants/slugs de vos champs ACF

3/ Ajouter des filtres sur ces nouvelles colonnes

Pour rendre les colonnes "filtrables" (c’est-à-dire pouvoir filtrer les éléments dans l’admin WordPress par valeur de capacité ou région) dans l’interface d’administration de votre Custom Post Type (CPT), vous devez ajouter des filtres déroulants au-dessus de la liste et modifier la requête admin selon la valeur choisie.

Voici ce que vous devez ajouter, à la suite du code précédent dans functions.php :

/*
** Ajoute les filtres déroulants dans l'admin
*/

add_action('restrict_manage_posts', 'filtrer_colonnes_hebergement_admin');
function filtrer_colonnes_hebergement_admin() {
    global $typenow;
    if ($typenow != 'hebergement') return; // Remplacez 'hebergement' par le slug de votre CPT

    // Filtre Région
    $regions = get_posts([
        'post_type' => 'hebergement',
        'posts_per_page' => -1,
        'meta_key' => 'hebergement_region',
        'fields' => 'ids',
    ]);

    $region_values = array_unique(array_map(function($id) {
        return get_post_meta($id, 'hebergement_region', true);
    }, $regions));
    $region_values = array_filter($region_values);

    echo '<select name="filtre_region">';
    echo '<option value="">Toutes les régions</option>';
    foreach ($region_values as $region) {
        $selected = ($_GET['filtre_region'] ?? '') === $region ? 'selected' : '';
        echo "<option value='$region' $selected>$region</option>";
    }
    echo '</select>';

    // Filtre Capacité
    $capacites = get_posts([
        'post_type' => 'hebergement',
        'posts_per_page' => -1,
        'meta_key' => 'hebergement_capacite',
        'fields' => 'ids',
    ]);

    $capacite_values = array_unique(array_map(function($id) {
        return get_post_meta($id, 'hebergement_capacite', true);
    }, $capacites));
    $capacite_values = array_filter($capacite_values);

    echo '<select name="filtre_capacite">';
    echo '<option value="">Toutes les capacités</option>';
    foreach ($capacite_values as $capacite) {
        $selected = ($_GET['filtre_capacite'] ?? '') === $capacite ? 'selected' : '';
        echo "<option value='$capacite' $selected>$capacite</option>";
    }
    echo '</select>';
}

/*
** Modifie la requête admin selon les filtres "hébergement" et "capacité"
*/

add_action('pre_get_posts', 'filtrer_colonnes_hebergement_query');
function filtrer_colonnes_hebergement_query($query) {
    if (!is_admin() || !$query->is_main_query()) return;

    global $typenow;
    if ($typenow != 'hebergement') return;

    if (!empty($_GET['filtre_region'])) {
        $query->set('meta_query', [
            [
                'key' => 'hebergement_region',
                'value' => sanitize_text_field($_GET['filtre_region']),
                'compare' => '='
            ]
        ]);
    }

    if (!empty($_GET['filtre_capacite'])) {
        $meta_query = $query->get('meta_query') ?: [];
        $meta_query[] = [
            'key' => 'hebergement_capacite',
            'value' => sanitize_text_field($_GET['filtre_capacite']),
            'compare' => '='
        ];
        $query->set('meta_query', $meta_query);
    }
}

Comme à l'étape précédente, remplacez les valeurs des "identifiants/slugs" par les vôtres.

Gérer les colonnes de l'admin WordPress avec une extension/plug-in

Il existe des extensions/plugins WordPress qui permettent l'ajout de vos champs ACF en tant que colonnes d'administration. Pour n'en citer qu'un, je recommande l'extension Admin Columns.

Besoin d'un expert pour améliorer les performances de votre site internet ?

Contactez-moi pour en discuter ensemble !
Recevez un audit et une estimation gratuite des optimisations à apporter à votre site web.

2 réponses à “Ajouter des champs ACF comme colonne dans l’admin WordPress”

  1. Aurore dit :

    Bonjour,
    Merci pour le tuto, est ce qu’il est possible d’ajouter des filtres (pour trier les colonnes) en plus ?

    Merci d’avance

    • thibaut dit :

      Bonjour Aurore,
      Merci pour ton message.
      Je viens d’ajouter une étape 3 à mon tuto pour pouvoir ajouter des filtres de tri à ces nouvelles colonnes !
      Cordialement

Laisser un commentaire

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