Astuce Rendez votre colonne personnalisée triable

Dans un article récent de Claudio Simeone, il a montré comment ajouter des colonnes supplémentaires à votre message, des écrans de type personnalisé, des écrans d’administrateur (ou supprimer des écrans existants). Dans cette astuce, je m'appuie sur cela pour vous montrer comment rendre triables les colonnes que vous venez de créer..


Pour indiquer à WordPress quelles colonnes vous souhaitez enregistrer comme pouvant être triées, vous avez besoin de ce filtre:

 gérer _ $ screen-> id _sortable_column

Pour les posts et les pages, $ screen-> id est 'post-édition' et 'modifier la page' respectivement. En général, pour un type de message avec le nom 'mon-type-post', il est 'edit-my-post-type'.

Le filtre passe un tableau avec les noms des colonnes pouvant être triées sous forme de clés et la liste des éléments à classer comme valeur. Plus précisément, les valeurs dictent ce que le 'commandé parLe paramètre 'est défini comme dans la requête qui remplit la table. De la même manière que vous pouvez supprimer des colonnes, vous pouvez également rendre les colonnes "insaisissables" en les supprimant de ce tableau. Voyons un exemple:


Enregistrer une colonne

Après l'article de Claudio, supposons que nous ayons ajouté la colonne 'slices' à notre type d'article 'cake', ce que nous pouvons faire comme suit:

 add_filter ('manage_edit-cake_columns', 'my_extra_cake_columns'); function my_extra_cake_columns ($ columns) $ columns ['slices'] = __ ('Slices', 'myplugindomain'); retourne $ colonnes; 

Et nous avons ajouté le contenu de la colonne comme suit:

 add_action ('manage_cake_posts_custom_column', 'mon_cake_column_content', 10, 2); function my_cake_column_content ($ nom_colonne, $ id_post) if ('tranches'! = $ nom_colonne) return; // Récupère le nombre de tranches de post meta $ slices = get_post_meta ($ post_id, 'slices', true); echo intval ($ tranches); 

J'ai stocké des tranches en post méta, mais vos colonnes peuvent être remplies par d'autres données.


Faire une colonne triable

Maintenant, nous enregistrons notre colonne personnalisée comme "triable". Comme mentionné ci-dessus, nous utilisons le gérer _ $ screen-> id _sortable_column filtre. le $ screen-> id dans ce cas est 'edit-cake'.

 add_filter ('manage_edit-cake_sortable_columns', 'mon_sortable_cake_column'); function my_sortable_cake_column ($ colonnes) $ colonnes ['slices'] = 'slices'; // Pour rendre une colonne 'non triable', supprimez-la du tableau // unset ($ columns ['date']); retourne $ colonnes; 

La clé du $ colonnes tableau indique une colonne pouvant être triée et sa valeur indique à WordPress quoi définircommandé par'dans la requête. Si cette valeur était l'une des 'commandé parest compris nativement par WordPress (ceux-ci incluentTitre','rendez-vous amoureux','modifié','compteur de commentaire', ou l’un des autres répertoriés sous WP_Query dans le Codex WordPress), nous pourrions nous arrêter ici. L'exception à cette règle, comme dans cet exemple, est le 'meta_value' et 'meta_value_num'paramètres, qui nous obligent à définir une clé méta ainsi.

Si nous voulons trier par une méta-valeur, ou par un autre moyen, WordPress ne comprend pas automatiquement, vous devez lui dire ce que vous entendez par commande par "tranche". Si vous commandez par la poste méta, le moyen le plus simple de le faire est de vous accrocher au pre_get_posts action. Cela passe un objet de requête que nous pouvons modifier. Notez que cette action est déclenchée pour toutes les requêtes par défaut (avant et arrière). Bien qu'il soit peu probable que des problèmes se posent, à moins que vous ne vouliez que WordPress interprète commandé par réglé sur "slice" sur le front-end également, c'est une bonne idée de ne traiter que les requêtes côté administrateur.

 add_action ('pre_get_posts', 'my_slice_orderby'); function my_slice_orderby ($ query) if (! is_admin ()) return; $ orderby = $ query-> get ('orderby'); if ('slice' == $ orderby) $ query-> set ('meta_key', 'slices'); $ query-> set ('orderby', 'meta_value_num'); 

Cela vérifie si notre requête commande par "tranche" et si c'est le cas, elle indique à WordPress de procéder à un ordre numérique en fonction de la valeur des "tranches" post méta. Si vous voulez trier la valeur par ordre alphabétique, utilisez 'meta_value' plutôt que 'meta_value_num'.

$ requête est un WP_Query objet, donc tout ce que vous pouvez trier en utilisant cet objet, vous pouvez trier vos colonnes. Pour tout ce qui est plus compliqué, vous devrez vous accrocher à la posts_orderby (ou post_clauses) crochet, mais c'est hors de portée de cette astuce rapide.

Remarque: Si une publication n'a pas de valeur stockée pour cette clé méta, elle n'apparaîtra pas lorsque vous triez en fonction de cette clé méta. Ceci est différent d'un article ayant 0 stocké comme méta-valeur.