{"id":233347,"date":"2023-02-11T20:28:00","date_gmt":"2023-02-11T17:28:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233347"},"modified":"2022-11-10T20:36:37","modified_gmt":"2022-11-10T17:36:37","slug":"come-modificare-o-aggiungere-colonne-personalizzate-allelenco-dei-post-nellamministratore-di-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/come-modificare-o-aggiungere-colonne-personalizzate-allelenco-dei-post-nellamministratore-di-wordpress\/","title":{"rendered":"Come modificare o aggiungere colonne personalizzate all&#8217;elenco dei post nell&#8217;amministratore di WordPress"},"content":{"rendered":"\n<p>WordPress ti consente di modificare e aggiungere colonne all&#8217;elenco di post, pagine o qualsiasi tipo di post personalizzato nel pannello di amministrazione. In questo post vedremo come!<\/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=\"Come modificare o aggiungere colonne personalizzate all&#039;elenco dei post nell&#039;amministratore di WordPress\" ><\/a><\/p>\n<p>Ci sono due hook da considerare: un filtro per la posizione e l&#8217;intestazione della colonna e un&#8217;azione per l&#8217;output della colonna per ogni post. Il tipo di post fa parte dei nomi degli hook. Esaminiamoli uno per uno, iniziando dal filtro.<\/p>\n<h2>Filtro a colonna<\/h2>\n<p>Il filtro per modificare, rimuovere o aggiungere colonne all&#8217;elenco dei post nel pannello di amministrazione di WordPress \u00e8 <code>manage_{$post_type}_posts_columns<\/code>. Scambia <code>{$post_type}<\/code>con il tipo di post desiderato. Per esempio; se desideri modificare le colonne per il tipo di post &quot; <code>post<\/code>&quot;, il nome del filtro sarebbe <code>manage_post_posts_columns<\/code>. E per un tipo di post personalizzato &#8216; <code>product<\/code>&#8216;, il nome del filtro sarebbe <code>manage_product_posts_columns<\/code>.<\/p>\n<p>PS: WordPress ha un filtro di colonna esclusivamente per il tipo di post &#8216; <code>page<\/code>&#8216;: <code>manage_pages_columns<\/code>, ma otterrai lo stesso risultato usando il filtro <code>manage_page_posts_columns<\/code>.<\/p>\n<p>Fornito come argomento al filtro, ottieni l&#8217;intera matrice di tutte le colonne per quel tipo di post. Ogni colonna ha una chiave univoca e i loro valori sono le etichette mostrate nell&#8217;intestazione della colonna. Esempi di chiavi sono &#8216; <code>cb<\/code>&#8216; per la colonna della casella di controllo e &#8216; <code>title<\/code>&#8216; per la colonna del titolo del post. L&#8217;ordine degli elementi nell&#8217;array determina l&#8217;ordine delle colonne.<\/p>\n<p>Quello che devi fare per aggiungere una nuova colonna \u00e8 semplicemente aggiungere una nuova coppia chiave + valore all&#8217;array e restituirla. Puoi manipolare l&#8217;array come desideri, ad esempio riordinandolo.<\/p>\n<h2>Gancio del contenuto della colonna<\/h2>\n<p>Quale hook \u00e8 necessario utilizzare per controllare l&#8217;output del contenuto della colonna dipende dal fatto che il tipo di post sia impostato o meno per essere gerarchico o meno. \u00c8 stato definito un tipo di post gerarchico come <code>'hierarchical' =&gt; true<\/code>in <code>register_post_type<\/code>. Qualsiasi tipo di post non gerarchico, incluso il tipo di post integrato &quot; &quot; di WordPress <code>post<\/code>, utilizza il nome hook <code>manage_{$post_type}_custom_column<\/code>. Qualsiasi tipo di post gerarchico, incluso il &quot;tipo di post integrato&quot; di WordPress <code>page<\/code>, utilizza il nome dell&#8217;hook <code>manage_pages_custom_column<\/code>(nota: nessuna iniezione del nome del tipo di post nel nome dell&#8217;hook).<\/p>\n<p>Fornito come argomento per questo hook si ottiene il nome della colonna, che \u00e8 la chiave menzionata nel filtro della colonna sopra (ad esempio &#8216; <code>cb<\/code>&#8216; per la colonna checkbox), e in secondo luogo l&#8217;ID del post. Questo hook viene eseguito su ogni post e la premessa di base \u00e8 che controlli se siamo o meno nel tipo di colonna corretto (tramite la chiave) e, in tal caso, usa l&#8217;ID post per recuperare il meta del post o simile e produrre cosa tu vuoi.<\/p>\n<h2>Esempi<\/h2>\n<p>Diamo un&#8217;occhiata a un codice di esempi pratici.<\/p>\n<h3>Aggiungi una colonna personalizzata ai post che visualizza un meta post personalizzato<\/h3>\n<p>Questo \u00e8 l&#8217;uso pi\u00f9 semplice dell&#8217;aggiunta di colonne personalizzate. Supponiamo di voler aggiungere una colonna personalizzata al tipo di post &quot;post&quot;. Lo vogliamo alla fine delle colonne, chiamato &quot;Verificato&quot;, e dovrebbe restituire &quot;S\u00ec&quot; o &quot;No&quot; a seconda di un meta valore del post personalizzato. Nota: questo esempio non include il salvataggio o l&#8217;aggiornamento del meta post personalizzato.<\/p>\n<p>Nel nostro <code>functions.php<\/code>o in qualsiasi altro codice del tema o del plug-in, aggiungeremo la colonna stessa unendola nell&#8217;array di colonne e nell&#8217;hook per l&#8217;output della colonna, recuperiamo il valore del meta meta e lo emettiamo.<\/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>L&#8217;output pu\u00f2 essere qualsiasi cosa tu voglia, ho semplicemente aggiunto un <code>span<\/code>intorno all&#8217;output con diversi colori del testo per una facile identificazione.<\/p>\n<h3>Aggiungi una colonna personalizzata a un tipo di post personalizzato gerarchico che mostra il post antenato<\/h3>\n<p>Quando un tipo di post \u00e8 gerarchico, i post possono avere post principali. Diciamo che abbiamo un tipo di post personalizzato gerarchico &quot; <code>subject<\/code>&quot; per le materie scolastiche in cui \u00e8 abitudine creare molti post per bambini e persino post per figli di bambini. Per una migliore panoramica, vogliamo aggiungere una colonna che mostra il genitore antenato del post (&quot;oggetto radice&quot;). Se il post \u00e8 un post di primo livello, viene mostrato un semplice &quot;-&quot;, altrimenti la colonna restituisce il titolo del post principale dell&#8217;antenato in un collegamento per modificare il post.<\/p>\n<p>Poich\u00e9 ci riferiamo a un tipo di post gerarchico, dobbiamo utilizzare un hook diverso per l&#8217;output del contenuto della colonna rispetto all&#8217;esempio sopra, ma il processo \u00e8 esattamente lo stesso.<\/p>\n<p>Questo codice mostra anche un esempio di come inserire una colonna nel mezzo dell&#8217;array di colonne. Definiamo che la nostra colonna dovrebbe precedere &#8216;author&#8217; e utilizziamo le funzioni di array PHP per iniettare l&#8217;elemento nella giusta posizione.<\/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>Rimozione di una colonna<\/h3>\n<p>Rimuovere una colonna da un tipo di post \u00e8 piuttosto semplice; tutto ci\u00f2 che serve \u00e8 filtrare le colonne dei post, rimuovere l&#8217;elemento dall&#8217;array e restituirlo. Non \u00e8 necessario collegarsi all&#8217;hook di output della colonna. Per esempio; rimuovendo la <code>date<\/code>colonna &#8216; &#8216; predefinita dal tipo di post &#8216; <code>post<\/code>&#8216;:<\/p>\n<pre><code>add_filter('manage_post_posts_columns', function($columns) {\n    unset($columns['date']);\n    return $columns;\n});<\/code><\/pre>\n<h3>Modifica dei nomi o della posizione delle colonne predefinite<\/h3>\n<p>Supponiamo di avere un tipo di post personalizzato &#8216; <code>book<\/code>&#8216; e di voler sostituire il nome di colonna predefinito &quot;Autore&quot; con &quot;Editore&quot;. Filtriamo semplicemente il filtro delle colonne e diamo alla chiave &#8216; <code>author<\/code>&#8216; un valore diverso:<\/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>\u00c8 possibile riordinare le colonne utilizzando le funzioni di matrice PHP. Tieni presente che l&#8217;array risultante deve essere un array associativo con gli &quot;ID&quot; di colonna come chiavi e la relativa etichetta come valori. Questo \u00e8 un semplice esempio di come togliere la <code>author<\/code>colonna &#8221; &#8216; e metterla alla fine, riordinando cos\u00ec le colonne:<\/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>Impostazione di una colonna personalizzata come ordinabile<\/h3>\n<p>Per impostazione predefinita, alcune delle colonne di WordPress sono ordinabili, ad esempio il titolo del post, il conteggio dei commenti e la data. \u00c8 possibile rendere ordinabile la tua colonna personalizzata, ma richiede un po &#8216;pi\u00f9 di codice e l&#8217;aggancio all&#8217;hook delle query post di WordPress per dire a WordPress come ordinare in base al meta del tuo post.<\/p>\n<p>Supponiamo di avere un tipo di post personalizzato &#8216; <code>movie<\/code>&#8216;, e con il codice seguente aggiungiamo una colonna personalizzata che mostra il meta post personalizzato &#8216; <code>duration<\/code>&#8216;.<\/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>Per dire a WordPress che vogliamo che la nostra colonna sia ordinabile, dobbiamo agganciarci al filtro <code>manage_edit-{$post_type}_sortable_columns<\/code>. Aggiungiamo la nostra colonna all&#8217;array delle colonne filtrabili, quindi definiamo quale <code>orderby<\/code>dovrebbe essere il valore &#8216; &#8216;. Impostiamo un valore personalizzato univoco l\u00ec, lo stesso nome della nostra colonna, a cui possiamo fare riferimento nel nostro hook di query in seguito.<\/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>Se aggiorni WordPress ora, dovresti vedere che la nostra colonna personalizzata \u00e8 effettivamente selezionabile e ordinabile, ma non viene ordinata correttamente. Questo perch\u00e9 WordPress non interpreta &#8216; <code>duration<\/code>&#8216; come un <code>orderby<\/code>&#8216; valore. Questo \u00e8 ci\u00f2 che risolveremo agganciandoci a &#8216; <code>pre_get_posts<\/code>&#8216;:<\/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>Poich\u00e9 il nostro meta post personalizzato &quot; <code>duration<\/code>&quot; sar\u00e0 sempre un numero, possiamo definire &quot; <code>orderby<\/code>&quot; come &quot; <code>meta_value_num<\/code>&quot; per il confronto dei numeri. Regola gli argomenti della query per adattarli ai tuoi meta valori personalizzati.<\/p>\n<h3>Disabilita l&#8217;ordinamento per le colonne predefinite<\/h3>\n<p>Disabilitare l&#8217;ordinamento per una colonna predefinita \u00e8 piuttosto semplice. Tutto quello che dobbiamo fare \u00e8 agganciarci al filtro <code>manage_edit-{$post_type}_sortable_columns<\/code>e rimuovere dall&#8217;array la colonna su cui non vogliamo effettuare l&#8217;ordinamento. Ad esempio, questo rimuove l&#8217;ordinamento per la colonna della data per il tipo di post &#8216; <code>post<\/code>&#8216;.<\/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\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Questo post approfondisce come modificare o aggiungere colonne all&#8217;elenco di post, pagine o qualsiasi tipo di post personalizzato nel pannello di amministrazione di 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":[896,896,720,835,1110,804,804,835,720,844,844,865,865],"tags":[1168],"class_list":{"0":"post-233347","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-codice","9":"category-sviluppatore","10":"category-guida-per-principianti","11":"category-n-a","12":"category-php-6","16":"category-tutorial","18":"category-wordpress-6","20":"tag-affiai-it"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233347","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=233347"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233347\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/223841"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}