{"id":234198,"date":"2023-02-11T20:15:00","date_gmt":"2023-02-11T17:15:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234198"},"modified":"2022-11-11T23:54:59","modified_gmt":"2022-11-11T20:54:59","slug":"comment-modifier-ou-ajouter-des-colonnes-personnalisees-a-la-liste-des-publications-dans-wordpress-admin","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-modifier-ou-ajouter-des-colonnes-personnalisees-a-la-liste-des-publications-dans-wordpress-admin\/","title":{"rendered":"Comment modifier ou ajouter des colonnes personnalis\u00e9es \u00e0 la liste des publications dans WordPress Admin"},"content":{"rendered":"\n<p>WordPress vous permet de modifier et d&rsquo;ajouter des colonnes \u00e0 la liste des publications, des pages ou de tout type de publication personnalis\u00e9e dans le panneau d&rsquo;administration. Dans cet article, nous verrons comment\u00a0!<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153990-61e5180a562a1.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153990-61e5180a562a1.png\" alt=\"Comment modifier ou ajouter des colonnes personnalis\u00e9es \u00e0 la liste des publications dans WordPress Admin\" ><\/a><\/p>\n<p>Il y a deux crochets \u00e0 consid\u00e9rer\u00a0: un filtre pour la position et l&rsquo;en-t\u00eate de la colonne, et une action pour la sortie de la colonne pour chaque article. Le type de publication fait partie des noms des crochets. Examinons-les un par un, en commen\u00e7ant par le filtre.<\/p>\n<h2>Filtre de colonne<\/h2>\n<p>Le filtre pour modifier, supprimer ou ajouter des colonnes \u00e0 la liste des publications dans le panneau d&rsquo;administration de WordPress est <code>manage_{$post_type}_posts_columns<\/code>. \u00c9changez <code>{$post_type}<\/code>avec le type de publication souhait\u00e9. Par exemple; si vous souhaitez modifier les colonnes pour le type de publication &lsquo; <code>post<\/code>&lsquo;, le nom du filtre serait <code>manage_post_posts_columns<\/code>. Et pour un type de publication personnalis\u00e9 &lsquo; <code>product<\/code>&lsquo;, le nom du filtre serait <code>manage_product_posts_columns<\/code>.<\/p>\n<p>PS: WordPress a un filtre de colonne exclusivement pour le type de publication &lsquo; <code>page<\/code>&lsquo;: <code>manage_pages_columns<\/code>, mais vous obtiendrez le m\u00eame r\u00e9sultat en utilisant le filtre <code>manage_page_posts_columns<\/code>.<\/p>\n<p>Fourni comme argument au filtre, vous obtenez le tableau complet de toutes les colonnes pour ce type de publication. Chaque colonne a une cl\u00e9 unique et leurs valeurs sont les \u00e9tiquettes affich\u00e9es dans l&rsquo;en-t\u00eate de colonne. Des exemples de cl\u00e9s sont &lsquo; <code>cb<\/code>&lsquo; pour la colonne de cases \u00e0 cocher et &lsquo; <code>title<\/code>&lsquo; pour la colonne de titre de publication. L&rsquo;ordre des \u00e9l\u00e9ments dans le tableau d\u00e9termine l&rsquo;ordre des colonnes.<\/p>\n<p>Ce que vous devez faire pour ajouter une nouvelle colonne est simplement d&rsquo;ajouter une nouvelle paire cl\u00e9 + valeur au tableau et de la renvoyer. Vous pouvez manipuler le tableau comme vous le souhaitez, par exemple en le r\u00e9organisant.<\/p>\n<h2>Crochet de contenu de colonne<\/h2>\n<p>Le crochet que vous devez utiliser pour contr\u00f4ler la sortie du contenu de la colonne d\u00e9pend du fait que votre type de publication soit ou non d\u00e9fini comme hi\u00e9rarchique ou non. Un type de poste hi\u00e9rarchique a \u00e9t\u00e9 d\u00e9fini comme <code>'hierarchical' =&gt; true<\/code>dans le <code>register_post_type<\/code>. Tous les types de publication non hi\u00e9rarchiques, y compris le type de publication int\u00e9gr\u00e9 de WordPress &lsquo; <code>post<\/code>&lsquo;, utilisent le crochet name <code>manage_{$post_type}_custom_column<\/code>. Tous les types de publication hi\u00e9rarchiques, y compris le type de publication int\u00e9gr\u00e9 de WordPress &quot; <code>page<\/code>&quot;, utilisent le nom du crochet <code>manage_pages_custom_column<\/code>(remarque\u00a0: aucune injection du nom du type de publication dans le nom du crochet).<\/p>\n<p>Fourni comme arguments \u00e0 ce crochet, vous obtenez le nom de la colonne, qui est la cl\u00e9 mentionn\u00e9e dans le filtre de colonne ci-dessus (par exemple &lsquo; <code>cb<\/code>&lsquo; pour la colonne de case \u00e0 cocher), et deuxi\u00e8mement l&rsquo;ID de publication. Ce crochet est ex\u00e9cut\u00e9 sur chaque publication, et le principe de base est que vous v\u00e9rifiez si nous sommes ou non au bon type de colonne (par la cl\u00e9), et si nous le sommes, utilisez l&rsquo;ID de publication pour r\u00e9cup\u00e9rer la m\u00e9ta de publication ou similaire et sortir quoi tu veux.<\/p>\n<h2>Exemples<\/h2>\n<p>Regardons un code d&rsquo;exemples pratiques.<\/p>\n<h3>Ajouter une colonne personnalis\u00e9e aux publications qui affiche une m\u00e9ta de publication personnalis\u00e9e<\/h3>\n<p>Il s&rsquo;agit de l&rsquo;utilisation la plus simple de l&rsquo;ajout de colonnes personnalis\u00e9es. Disons que nous voulons ajouter une colonne personnalis\u00e9e pour publier le type &lsquo;post&rsquo;. Nous le voulons \u00e0 la toute fin des colonnes, appel\u00e9 &quot;V\u00e9rifi\u00e9&quot;, et il doit afficher &quot;Oui&quot; ou &quot;Non&quot; en fonction d&rsquo;une valeur de m\u00e9ta de publication personnalis\u00e9e. Remarque: cet exemple n&rsquo;inclut pas l&rsquo;enregistrement ou la mise \u00e0 jour de la m\u00e9ta de publication personnalis\u00e9e.<\/p>\n<p>Dans notre <code>functions.php<\/code>ou n&rsquo;importe o\u00f9 dans notre code de th\u00e8me ou de plugin, nous ajouterons la colonne elle-m\u00eame en la fusionnant dans le tableau de colonnes, et dans le crochet pour la sortie de colonne, nous r\u00e9cup\u00e9rons la valeur de la m\u00e9ta post et la sortons.<\/p>\n<pre><code>add_filter('manage_post_posts_columns', function($columns) {\n    return array_merge($columns, ['verified' =&gt; __('Verified', 'textdomain')]);\n});\n\u00a0\nadd_action('manage_post_posts_custom_column', function($column_key, $post_id) {\n    if ($column_key == 'verified') {\n        $verified = get_post_meta($post_id, 'verified', true);\n        if ($verified) {\n            echo '&lt;span style=\"color:green;\"&gt;'; _e('Yes', 'textdomain'); echo '&lt;\/span&gt;';\n        } else {\n            echo '&lt;span style=\"color:red;\"&gt;'; _e('No', 'textdomain'); echo '&lt;\/span&gt;';\n        }\n    }\n}, 10, 2);<\/code><\/pre>\n<p>La sortie peut \u00eatre ce que vous voulez, j&rsquo;ai simplement ajout\u00e9 un <code>span<\/code>autour de la sortie avec diff\u00e9rentes couleurs de texte pour une identification facile.<\/p>\n<h3>Ajouter une colonne personnalis\u00e9e \u00e0 un type de publication personnalis\u00e9 hi\u00e9rarchique qui affiche sa publication anc\u00eatre<\/h3>\n<p>Lorsqu&rsquo;un type de publication est hi\u00e9rarchique, les publications peuvent avoir des publications parentes. Disons que nous avons un type de publication personnalis\u00e9 hi\u00e9rarchique &lsquo; <code>subject<\/code>&lsquo; pour les mati\u00e8res scolaires o\u00f9 il est habituel de faire beaucoup de publications d&rsquo;enfants, et m\u00eame des publications d&rsquo;enfants d&rsquo;enfants. Pour une meilleure vue d&rsquo;ensemble, nous voulons ajouter une colonne qui affiche le parent anc\u00eatre de la publication (&quot;sujet racine&quot;). Si le message est un message de niveau sup\u00e9rieur, un simple \u00ab-\u00bb est affich\u00e9, sinon la colonne affiche le titre du message parent de l&rsquo;anc\u00eatre dans un lien pour modifier le message.<\/p>\n<p>Parce que nous faisons r\u00e9f\u00e9rence \u00e0 un type de publication hi\u00e9rarchique, nous devons utiliser un crochet diff\u00e9rent pour la sortie du contenu de la colonne que l&rsquo;exemple ci-dessus, mais le processus est exactement le m\u00eame.<\/p>\n<p>Ce code montre \u00e9galement un exemple comment injecter une colonne au milieu du tableau de colonnes. Nous d\u00e9finissons que notre colonne doit venir avant &lsquo;author&rsquo; et utilisons les fonctions de tableau PHP pour injecter l&rsquo;\u00e9l\u00e9ment dans la bonne position.<\/p>\n<pre><code>add_filter('manage_subject_posts_columns', function($columns) {\n    $offset = array_search('author', array_keys($columns));\n    return array_merge(array_slice($columns, 0, $offset), ['ancestor' =&gt; __('Ancestor', 'textdomain')], array_slice($columns, $offset, null));\n});\n\u00a0\nadd_action('manage_pages_custom_column', function($column_key, $post_id) {\n    if ($column_key == 'ancestor') {\n        $ancestors = get_ancestors($post_id, 'subject', 'post_type');\n        $post_ancestor = end($ancestors);\n        if ($post_ancestor != 0) {\n            echo '&lt;a href=\"'. get_edit_post_link($post_ancestor). '\"&gt;'. get_the_title($post_ancestor). '&lt;\/a&gt;';\n        } else {\n            echo '-';\n        }\n    }\n}, 10, 2);<\/code><\/pre>\n<h3>Suppression d&rsquo;une colonne<\/h3>\n<p>Supprimer une colonne d&rsquo;un type de publication est assez simple ; tout ce dont vous avez besoin est de filtrer les colonnes des messages, de supprimer l&rsquo;\u00e9l\u00e9ment du tableau et de le renvoyer. Vous n&rsquo;avez pas besoin de vous connecter au crochet de sortie de la colonne. Par exemple; suppression de la <code>date<\/code>colonne &lsquo; &lsquo; par d\u00e9faut du type de message &lsquo; <code>post<\/code>&lsquo;\u00a0:<\/p>\n<pre><code>add_filter('manage_post_posts_columns', function($columns) {\n    unset($columns['date']);\n    return $columns;\n});<\/code><\/pre>\n<h3>Modification des noms ou de la position des colonnes par d\u00e9faut<\/h3>\n<p>Supposons que nous ayons un type de publication personnalis\u00e9 &lsquo; <code>book<\/code>&lsquo; et que nous souhaitions remplacer le nom de colonne par d\u00e9faut \u00ab\u00a0Auteur\u00a0\u00bb par \u00ab\u00a0\u00c9diteur\u00a0\u00bb. Nous filtrons simplement le filtre des colonnes et donnons \u00e0 la cl\u00e9 &lsquo; <code>author<\/code>&lsquo; une valeur diff\u00e9rente :<\/p>\n<pre><code>add_filter('manage_book_posts_columns', function($columns) {\n    $columns['author'] = __('Publisher', 'textdomain');\n    return $columns;\n});<\/code><\/pre>\n<p>La r\u00e9organisation des colonnes peut \u00eatre effectu\u00e9e \u00e0 l&rsquo;aide des fonctions de tableau PHP. Gardez \u00e0 l&rsquo;esprit que le tableau r\u00e9sultant doit \u00eatre un tableau associatif avec les colonnes &quot;ID&quot; comme cl\u00e9s et leur \u00e9tiquette comme valeurs. Voici un exemple simple de suppression de la <code>author<\/code>colonne &lsquo; &lsquo; et de mise \u00e0 la toute fin, r\u00e9organisant ainsi les colonnes\u00a0:<\/p>\n<pre><code>add_filter('manage_post_posts_columns', function($columns) {\n    $taken_out = $columns['author'];\n    unset($columns['author']);\n    $columns['author'] = $taken_out;\n    return $columns;\n});<\/code><\/pre>\n<h3>D\u00e9finition d&rsquo;une colonne personnalis\u00e9e comme pouvant \u00eatre tri\u00e9e<\/h3>\n<p>Par d\u00e9faut, certaines colonnes de WordPress sont triables, par exemple le titre du message, le nombre de commentaires et la date. Il est possible de rendre votre colonne personnalis\u00e9e triable, mais cela n\u00e9cessite un peu plus de code et de se connecter au crochet de requ\u00eate de publication de WordPress afin de dire \u00e0 WordPress comment ordonner par votre m\u00e9ta de publication.<\/p>\n<p>Supposons que nous ayons un type de publication personnalis\u00e9 &lsquo; <code>movie<\/code>&lsquo;, et avec le code suivant, nous ajoutons une colonne personnalis\u00e9e qui affiche la m\u00e9ta de publication personnalis\u00e9e &lsquo; <code>duration<\/code>&lsquo;.<\/p>\n<pre><code>add_filter('manage_movie_posts_columns', function($columns) {\n    return array_merge($columns, ['duration' =&gt; __('Duration', 'textdomain')]);\n});\n\u00a0\nadd_action('manage_movie_posts_custom_column', function($column_key, $post_id) {\n    if ($column_key == 'duration') {\n        $duration = get_post_meta($post_id, 'duration', true);\n        echo (!empty($duration))? sprintf(__('%s minutes', 'textdomain'), $duration): __('Unknown', 'textdomain');\n    }\n}, 10, 2);<\/code><\/pre>\n<p>Afin de dire \u00e0 WordPress que nous voulons que notre colonne soit triable, nous devons nous connecter au filtre <code>manage_edit-{$post_type}_sortable_columns<\/code>. Nous ajoutons notre colonne au tableau des colonnes filtrables, puis nous d\u00e9finissons la <code>orderby<\/code>valeur &lsquo; &lsquo;. Nous y d\u00e9finissons une valeur personnalis\u00e9e unique &#8211; le m\u00eame nom que notre colonne &#8211; \u00e0 laquelle nous pourrons nous r\u00e9f\u00e9rer ult\u00e9rieurement dans notre crochet de requ\u00eate.<\/p>\n<pre><code>add_filter('manage_edit-movie_sortable_columns', function($columns) {\n    $columns['duration'] = 'duration';\n    return $columns;\n});<\/code><\/pre>\n<p>Si vous actualisez WordPress maintenant, vous devriez voir que notre colonne personnalis\u00e9e est en effet cliquable et triable, mais elle ne se trie pas correctement. C&rsquo;est parce que WordPress ne comprend pas &lsquo; <code>duration<\/code>&lsquo; comme une <code>orderby<\/code>valeur &lsquo; &lsquo;. C&rsquo;est ce que nous allons corriger en nous connectant \u00e0 &lsquo; <code>pre_get_posts<\/code>&lsquo;\u00a0:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin()) {\n        return;\n    }\n    $orderby = $query-&gt;get('orderby');\n    if ($orderby == 'duration') {\n        $query-&gt;set('meta_key', 'duration');\n        $query-&gt;set('orderby', 'meta_value_num');\n    }\n});<\/code><\/pre>\n<p>\u00c9tant donn\u00e9 que notre m\u00e9ta de publication personnalis\u00e9e &lsquo; <code>duration<\/code>&lsquo; sera toujours un nombre, nous pouvons d\u00e9finir &lsquo; <code>orderby<\/code>&lsquo; comme &lsquo; <code>meta_value_num<\/code>&lsquo; pour la comparaison des nombres. Ajustez les arguments de la requ\u00eate en fonction de vos m\u00e9ta-valeurs de publication personnalis\u00e9es.<\/p>\n<h3>D\u00e9sactiver le tri des colonnes par d\u00e9faut<\/h3>\n<p>La d\u00e9sactivation du tri pour une colonne par d\u00e9faut est assez simple. Tout ce que nous avons \u00e0 faire est de nous connecter au filtre <code>manage_edit-{$post_type}_sortable_columns<\/code>et de supprimer la colonne que nous ne voulons pas trier du tableau. Par exemple, cela supprime le tri de la colonne de date pour le type de publication &lsquo; <code>post<\/code>&lsquo;.<\/p>\n<pre><code>add_filter('manage_edit-post_sortable_columns', function($columns) {\n    unset($columns['date']);\n    return $columns;\n});<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cet article explique en d\u00e9tail comment modifier ou ajouter des colonnes \u00e0 la liste des articles, des pages ou de tout type d&rsquo;article personnalis\u00e9 dans le panneau d&rsquo;administration WordPress.<\/p>\n","protected":false},"author":1,"featured_media":223841,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,893,717,717,832,1110,801,801,832,841,841,862,862],"tags":[1167],"class_list":["post-234198","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-n-a","category-php-3","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=234198"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234198\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/223841"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}