Aller au contenu principal
Version: 26.0.8.0

Gestion des colonnes

Elementum simplifie la personnalisation des colonnes dans l'administration des types de contenu personnalisés.

Configuration de base

La personnalisation des colonnes se fait via la propriété $columns dans votre classe de post type :

public function __construct()
{
    $this->columns = [
        // Supprimer des colonnes existantes
        "remove" => [
            "author",       // Supprime la colonne auteur
            "date",         // Supprime la colonne date
            "categories"    // Supprime la colonne catégories
        ],

        // Ajouter ou renommer des colonnes
        "add" => [
            "title" => "Nom du service",  // Renomme la colonne titre
            "price" => "Prix",           // Ajoute une colonne prix
            "status" => "Statut"         // Ajoute une colonne statut
        ]
    ];

    parent::__construct();
}

Personnalisation du contenu des colonnes

Affichage automatique des champs Carbon Fields

Lorsque le nom d'une colonne correspond exactement à l'identifiant d'un champ Carbon Fields, sa valeur est automatiquement affichée. Aucune configuration supplémentaire n'est nécessaire.

public function __construct()
{
    $this->columns = [
        'add' => [
            'price' => 'Prix',  // Affichera automatiquement la valeur du champ 'price'
            'status' => 'Statut' // Affichera automatiquement la valeur du champ 'status'
        ]
    ];

    parent::__construct();
}

Personnalisation avancée avec setColumnsContent

Utilisez setColumnsContent uniquement lorsque vous avez besoin d'un affichage personnalisé ou pour des colonnes spéciales.

Signature : setColumnsContent(string $columnKey, ?callable $callback = null, ?int $width = null)

Le paramètre $width (optionnel) définit la largeur de la colonne en pixels directement depuis PHP, sans avoir à écrire de CSS séparé.

public function __construct()
{
    // Affichage personnalisé + largeur fixe
    $this->setColumnsContent("price", function($post_id) {
        $price = get_post_meta($post_id, 'price', true);
        echo $price ? number_format($price, 2, ',', ' ') . '' : 'N/A';
    }, width: 100);

    // Colonne sans callback (affichage automatique) mais avec largeur contrainte
    $this->setColumnsContent("status", width: 80);

    // Pour des colonnes qui ne sont pas des champs personnalisés
    $this->setColumnsContent("custom_column", function($post_id) {
        // Votre logique personnalisée ici
    });

    parent::__construct();
}

Colonnes triables

Pour rendre une colonne triable, utilisez la méthode makeSortable :

public function __construct()
{
    // Configuration des colonnes...

    // Rendre les colonnes triables
    $this->makeSortable("price")
         ->makeSortable("status");

    parent::__construct();
}

Bonnes pratiques

  1. Préfixez les noms de colonnes personnalisées pour éviter les conflits
  2. Utilisez des callbacks pour les colonnes complexes
  3. Échappez toujours les sorties pour la sécurité
  4. Limitez le nombre de colonnes pour une meilleure lisibilité

Exemple complet

class Service extends PostType
{
    public function __construct()
    {
        $this->columns = [
            "remove" => ["author", "date", "categories"],
            "add" => [
                "title" => "Nom du service",
                "price" => "Prix",
                "status" => "Statut",
                "shortcode" => "Shortcode"
            ]
        ];

        $this->makeSortable("price")
             ->makeSortable("status");

        $this->setColumnsContent("shortcode", function($post_id) {
            echo '<code>[service id="' . $post_id . '"]</code>';
        });

        parent::__construct();
    }
}