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
- Préfixez les noms de colonnes personnalisées pour éviter les conflits
- Utilisez des callbacks pour les colonnes complexes
- Échappez toujours les sorties pour la sécurité
- 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(); } }