{"id":233285,"date":"2023-02-11T19:49:00","date_gmt":"2023-02-11T16:49:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233285"},"modified":"2022-11-10T20:17:56","modified_gmt":"2022-11-10T17:17:56","slug":"hur-man-aendrar-eller-laegger-till-anpassade-kolumner-i-inlaeggslistan-i-wordpress-admin","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/hur-man-aendrar-eller-laegger-till-anpassade-kolumner-i-inlaeggslistan-i-wordpress-admin\/","title":{"rendered":"Hur man \u00e4ndrar eller l\u00e4gger till anpassade kolumner i inl\u00e4ggslistan i WordPress Admin"},"content":{"rendered":"\n<p>WordPress l\u00e5ter dig \u00e4ndra och l\u00e4gga till kolumner i listan \u00f6ver inl\u00e4gg, sidor eller n\u00e5gon anpassad inl\u00e4ggstyp i adminpanelen. I det h\u00e4r inl\u00e4gget ska vi titta p\u00e5 hur!<\/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=\"Hur man \u00e4ndrar eller l\u00e4gger till anpassade kolumner i inl\u00e4ggslistan i WordPress Admin\" ><\/a><\/p>\n<p>Det finns tv\u00e5 krokar att \u00f6verv\u00e4ga: ett filter f\u00f6r kolumnens position och rubrik, och en \u00e5tg\u00e4rd f\u00f6r kolumnens utdata f\u00f6r varje inl\u00e4gg. Stolpetypen \u00e4r en del av krokarnas namn. L\u00e5t oss titta p\u00e5 dem en efter en, b\u00f6rja med filtret.<\/p>\n<h2>Kolumnfilter<\/h2>\n<p>Filtret f\u00f6r att \u00e4ndra, ta bort eller l\u00e4gga till kolumner i inl\u00e4ggslistan i WordPress adminpanel \u00e4r <code>manage_{$post_type}_posts_columns<\/code>. Byt <code>{$post_type}<\/code>med \u00f6nskad inl\u00e4ggstyp. Till exempel; om du vill redigera kolumner f\u00f6r inl\u00e4ggstyp &#8217; <code>post<\/code>&#8217; skulle filternamnet vara <code>manage_post_posts_columns<\/code>. Och f\u00f6r en anpassad inl\u00e4ggstyp &#8217; <code>product<\/code>&#8217; skulle filternamnet vara <code>manage_product_posts_columns<\/code>.<\/p>\n<p>PS: WordPress har ett kolumnfilter uteslutande f\u00f6r inl\u00e4ggstyp &#8217; <code>page<\/code>&#8217;: <code>manage_pages_columns<\/code>, men du kommer att uppn\u00e5 samma resultat genom att anv\u00e4nda filtret <code>manage_page_posts_columns<\/code>.<\/p>\n<p>Tillhandah\u00e5lls som argument till filtret f\u00e5r du hela arrayen av alla kolumner f\u00f6r den inl\u00e4ggstypen. Varje kolumn har en unik nyckel och deras v\u00e4rden \u00e4r etiketterna som visas i kolumnrubriken. Exempel p\u00e5 nycklar \u00e4r &#8217; <code>cb<\/code>&#8217; f\u00f6r kolumnen i kryssrutan och &#8217; <code>title<\/code>&#8217; f\u00f6r kolumnen f\u00f6r inl\u00e4ggets rubrik. Ordningen p\u00e5 elementen i arrayen best\u00e4mmer ordningen p\u00e5 kolumnerna.<\/p>\n<p>Vad du beh\u00f6ver g\u00f6ra f\u00f6r att l\u00e4gga till en ny kolumn \u00e4r helt enkelt att l\u00e4gga till ett nytt nyckel + v\u00e4rdepar till arrayen och returnera det. Du kan manipulera arrayen som du vill \u2013 till exempel \u00e4ndra ordning p\u00e5 den.<\/p>\n<h2>Krok f\u00f6r kolumninneh\u00e5ll<\/h2>\n<p>Vilken krok du beh\u00f6ver anv\u00e4nda f\u00f6r att kontrollera utdata fr\u00e5n kolumninneh\u00e5llet beror p\u00e5 om din posttyp \u00e4r inst\u00e4lld p\u00e5 hierarkisk eller inte. En hierarkisk posttyp har definierats som <code>'hierarchical' =&gt; true<\/code>i <code>register_post_type<\/code>. Alla icke-hierarkiska inl\u00e4ggstyper, inklusive WordPress&#8217; inbyggda inl\u00e4ggstyp &#8217; <code>post<\/code>&#8217;, anv\u00e4nder hook-namnet <code>manage_{$post_type}_custom_column<\/code>. Alla hierarkiska inl\u00e4ggstyper, inklusive WordPress&#8217; inbyggda inl\u00e4ggstyp &#8217; <code>page<\/code>&#8217;, anv\u00e4nder hook-namnet <code>manage_pages_custom_column<\/code>(obs: ingen injektion av posttypnamn i hook-namnet).<\/p>\n<p>Tillhandah\u00e5lls som argument till denna krok f\u00e5r du kolumnnamnet, vilket \u00e4r nyckeln som n\u00e4mns i kolumnfiltret ovan (t.ex. &#8217; <code>cb<\/code>&#8217; f\u00f6r kolumn f\u00f6r kryssruta), och f\u00f6r det andra post-ID. Denna krok k\u00f6rs p\u00e5 varje inl\u00e4gg, och grundf\u00f6ruts\u00e4ttningen \u00e4r att du kontrollerar om vi har r\u00e4tt kolumntyp eller inte (med nyckeln), och om vi g\u00f6r det, anv\u00e4nd inl\u00e4ggs-ID f\u00f6r att h\u00e4mta inl\u00e4ggsmeta eller liknande och mata ut vad du vill.<\/p>\n<h2>Exempel<\/h2>\n<p>L\u00e5t oss titta p\u00e5 n\u00e5gra praktiska exempel.<\/p>\n<h3>L\u00e4gg till en anpassad kolumn i inl\u00e4gg som visar en anpassad inl\u00e4ggsmeta<\/h3>\n<p>Detta \u00e4r den enklaste anv\u00e4ndningen av att l\u00e4gga till anpassade kolumner. L\u00e5t oss s\u00e4ga att vi vill l\u00e4gga till en anpassad kolumn till inl\u00e4ggstypen &quot;inl\u00e4gg&quot;. Vi vill ha den i slutet av kolumnerna, kallad &quot;Verified&quot;, och den ska mata ut &quot;Ja&quot; eller &quot;Nej&quot; beroende p\u00e5 ett anpassat inl\u00e4ggsmetav\u00e4rde. Obs: Det h\u00e4r exemplet inkluderar inte att spara eller uppdatera den anpassade postmeta.<\/p>\n<p>I v\u00e5rt <code>functions.php<\/code>eller var som helst i v\u00e5rt tema eller plugin-kod l\u00e4gger vi till sj\u00e4lva kolumnen genom att sl\u00e5 samman den i kolumnmatrisen, och i kroken f\u00f6r kolumnutdata h\u00e4mtar vi v\u00e4rdet p\u00e5 postmetan och matar ut det.<\/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>Utg\u00e5ngen kan vara vad du vill, jag lade helt enkelt till en <code>span<\/code>runt utmatningen med olika textf\u00e4rger f\u00f6r enkel identifiering.<\/p>\n<h3>L\u00e4gg till en anpassad kolumn till en hierarkisk anpassad inl\u00e4ggstyp som visar dess f\u00f6rfaderinl\u00e4gg<\/h3>\n<p>N\u00e4r en inl\u00e4ggstyp \u00e4r hierarkisk kan inl\u00e4gg ha \u00f6verordnade inl\u00e4gg. L\u00e5t oss s\u00e4ga att vi har en hierarkisk anpassad inl\u00e4ggstyp &#8217; <code>subject<\/code>&#8217; f\u00f6r skol\u00e4mnen d\u00e4r det \u00e4r en vana att g\u00f6ra inl\u00e4gg f\u00f6r m\u00e5nga barn och till och med barn till barn. F\u00f6r b\u00e4ttre \u00f6verblick vill vi l\u00e4gga till en kolumn som visar inl\u00e4ggets f\u00f6r\u00e4lder (&quot;rot\u00e4mne&#8221;). Om inl\u00e4gget \u00e4r ett inl\u00e4gg p\u00e5 toppniv\u00e5, visas ett enkelt &#8217;-&#8217;, annars matar kolumnen f\u00f6rfaderns \u00f6verordnade inl\u00e4ggstitel i en l\u00e4nk f\u00f6r att redigera inl\u00e4gget.<\/p>\n<p>Eftersom vi h\u00e4nvisar till en hierarkisk inl\u00e4ggstyp m\u00e5ste vi anv\u00e4nda en annan krok f\u00f6r att mata ut kolumninneh\u00e5ll \u00e4n exemplet ovan, men processen \u00e4r exakt densamma.<\/p>\n<p>Den h\u00e4r koden visar ocks\u00e5 ett exempel p\u00e5 hur man injicerar en kolumn i mitten av kolumnmatrisen. Vi definierar att v\u00e5r kolumn ska komma f\u00f6re &#8217;f\u00f6rfattare&#8217; och anv\u00e4nder PHP-arrayfunktioner f\u00f6r att injicera elementet i r\u00e4tt 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>Ta bort en kolumn<\/h3>\n<p>Att ta bort en kolumn fr\u00e5n en inl\u00e4ggstyp \u00e4r ganska enkelt; allt du beh\u00f6ver \u00e4r att filtrera postkolumner, ta bort elementet fr\u00e5n arrayen och returnera det. Du beh\u00f6ver inte haka i kolumnutg\u00e5ngskroken. Till exempel; tar bort standardkolumnen &#8217; <code>date<\/code>&#8217; fr\u00e5n inl\u00e4ggstypen &#8217; <code>post<\/code>&#8217;:<\/p>\n<pre><code>add_filter('manage_post_posts_columns', function($columns) {\n    unset($columns['date']);\n    return $columns;\n});<\/code><\/pre>\n<h3>\u00c4ndra standardkolumnernas namn eller position<\/h3>\n<p>L\u00e5t oss anta att vi har en anpassad inl\u00e4ggstyp &#8217; <code>book<\/code>&#8217;, och vi vill ers\u00e4tta standardkolumnnamnet &quot;Author&quot; med &quot;Publisher&quot;. Vi filtrerar helt enkelt kolumnfiltret och ger nyckeln &#8217; <code>author<\/code>&#8217; ett annat v\u00e4rde:<\/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>Omordning av kolumner kan g\u00f6ras genom att anv\u00e4nda PHP-arrayfunktioner. T\u00e4nk p\u00e5 att den resulterande matrisen m\u00e5ste vara en associativ matris med kolumn &quot;ID&quot; som nycklar och deras etikett som v\u00e4rden. Det h\u00e4r \u00e4r ett enkelt exempel p\u00e5 att ta ut <code>author<\/code>kolumnen &#8217; &#8217; och s\u00e4tta den i slutet och p\u00e5 s\u00e5 s\u00e4tt \u00e4ndra ordning p\u00e5 kolumnerna:<\/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>St\u00e4ll in en anpassad kolumn som sorterbar<\/h3>\n<p>Som standard \u00e4r vissa av WordPress kolumner sorterbara, till exempel inl\u00e4ggets titel, antal kommentarer och datum. Det \u00e4r m\u00f6jligt att g\u00f6ra din anpassade kolumn sorterbar, men det kr\u00e4ver lite mer kod och koppling till WordPresss postfr\u00e5gekrok f\u00f6r att ber\u00e4tta f\u00f6r WordPress hur man best\u00e4ller genom din postmeta.<\/p>\n<p>L\u00e5t oss anta att vi har en anpassad inl\u00e4ggstyp &#8217; <code>movie<\/code>&#8217;, och med f\u00f6ljande kod l\u00e4gger vi till en anpassad kolumn som visar den anpassade postmeta &#8217; <code>duration<\/code>&#8217;.<\/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>F\u00f6r att ber\u00e4tta f\u00f6r WordPress att vi vill att v\u00e5r kolumn ska vara sorterbar m\u00e5ste vi koppla in filtret <code>manage_edit-{$post_type}_sortable_columns<\/code>. Vi l\u00e4gger till v\u00e5r kolumn till den filtrerbara kolumnmatrisen och sedan definierar vi vad &#8217; <code>orderby<\/code>&#8217;-v\u00e4rdet ska vara. Vi anger ett unikt anpassat v\u00e4rde d\u00e4r \u2013 samma namn som v\u00e5r kolumn \u2013 som vi kan referera till i v\u00e5r fr\u00e5gekrok senare.<\/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>Om du uppdaterar WordPress nu b\u00f6r du se att v\u00e5r anpassade kolumn verkligen \u00e4r klickbar och sorterbar, men den sorterar inte r\u00e4tt. Det beror p\u00e5 att WordPress inte f\u00f6rst\u00e5r &#8217; <code>duration<\/code>&#8217; som ett &#8217; <code>orderby<\/code>&#8217; v\u00e4rde. Det \u00e4r vad vi fixar genom att koppla in &#8217; <code>pre_get_posts<\/code>&#8217;:<\/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>Eftersom v\u00e5r anpassade inl\u00e4ggsmeta &#8217; <code>duration<\/code>&#8217; alltid kommer att vara ett nummer, kan vi definiera &#8217; <code>orderby<\/code>&#8217; som &#8217; <code>meta_value_num<\/code>&#8217; f\u00f6r nummerj\u00e4mf\u00f6relse. Justera fr\u00e5geargumenten s\u00e5 att de passar dina anpassade inl\u00e4ggsmetav\u00e4rden.<\/p>\n<h3>Inaktivera sortering f\u00f6r standardkolumner<\/h3>\n<p>Att inaktivera sortering f\u00f6r en standardkolumn \u00e4r ganska enkelt. Allt vi beh\u00f6ver g\u00f6ra \u00e4r att haka i filtret <code>manage_edit-{$post_type}_sortable_columns<\/code>och ta bort kolumnen som vi inte vill sortera p\u00e5 fr\u00e5n arrayen. Detta tar till exempel bort sorteringen f\u00f6r datumkolumnen f\u00f6r posttyp &#8217; <code>post<\/code>&#8217;.<\/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\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Det h\u00e4r inl\u00e4gget g\u00e5r p\u00e5 djupet i hur du \u00e4ndrar eller l\u00e4gger till kolumner i listan \u00f6ver inl\u00e4gg, sidor eller n\u00e5gon anpassad inl\u00e4ggstyp i WordPress adminpanel.<\/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":[901,724,838,848,901,1110,807,807,838,848,724,868,868],"tags":[1173],"class_list":{"0":"post-233285","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-koda","8":"category-utvecklaren","9":"category-guide-foer-nyboerjare","10":"category-handledningar","12":"category-n-a","13":"category-php-9","18":"category-wordpress-9","20":"tag-affiai-sv"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233285","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=233285"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233285\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/223841"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=233285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=233285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=233285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}