{"id":233312,"date":"2023-02-11T20:37:00","date_gmt":"2023-02-11T17:37:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233312"},"modified":"2022-11-10T20:25:36","modified_gmt":"2022-11-10T17:25:36","slug":"jak-modyfikowac-lub-dodawac-niestandardowe-kolumny-do-listy-postow-w-wordpress-admin","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-modyfikowac-lub-dodawac-niestandardowe-kolumny-do-listy-postow-w-wordpress-admin\/","title":{"rendered":"Jak modyfikowa\u0107 lub dodawa\u0107 niestandardowe kolumny do listy post\u00f3w w WordPress Admin"},"content":{"rendered":"\n<p>WordPress pozwala modyfikowa\u0107 i dodawa\u0107 kolumny do listy post\u00f3w, stron lub dowolnego niestandardowego typu postu w panelu administracyjnym. W tym po\u015bcie przyjrzymy si\u0119, jak!<\/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=\"Jak modyfikowa\u0107 lub dodawa\u0107 niestandardowe kolumny do listy post\u00f3w w WordPress Admin\" ><\/a><\/p>\n<p>Do rozwa\u017cenia s\u0105 dwa haki: jeden filtr dla pozycji i nag\u0142\u00f3wka kolumny oraz jedna akcja dla danych wyj\u015bciowych kolumny dla ka\u017cdego posta. Typ s\u0142upka jest cz\u0119\u015bci\u0105 nazw hak\u00f3w. Przyjrzyjmy si\u0119 im po kolei, zaczynaj\u0105c od filtra.<\/p>\n<h2>Filtr kolumnowy<\/h2>\n<p>Filtr do modyfikacji, usuwania lub dodawania kolumn do listy post\u00f3w w panelu administracyjnym WordPressa to <code>manage_{$post_type}_posts_columns<\/code>. Wymie\u0144 <code>{$post_type}<\/code>z \u017c\u0105danym typem postu. Na przyk\u0142ad; je\u015bli chcesz edytowa\u0107 kolumny dla typu posta \u201e <code>post<\/code>&quot;, nazwa filtra to <code>manage_post_posts_columns<\/code>. A dla niestandardowego typu posta \u201e <code>product<\/code>&#8222;, nazw\u0105 filtra b\u0119dzie <code>manage_product_posts_columns<\/code>.<\/p>\n<p>PS: WordPress ma filtr kolumn wy\u0142\u0105cznie dla typu posta \u201e <code>page<\/code>&#8222;: <code>manage_pages_columns<\/code>, ale ten sam wynik osi\u0105gniesz, u\u017cywaj\u0105c filtra <code>manage_page_posts_columns<\/code>.<\/p>\n<p>Podany jako argument filtru, otrzymujesz pe\u0142n\u0105 tablic\u0119 wszystkich kolumn dla tego typu postu. Ka\u017cda kolumna ma unikalny klucz, a ich warto\u015bci s\u0105 etykietami widocznymi w nag\u0142\u00f3wku kolumny. Przyk\u0142adowe klucze to \u201e <code>cb<\/code>&#8221; dla kolumny pola wyboru i \u201e <code>title<\/code>&#8221; dla kolumny tytu\u0142u posta. Kolejno\u015b\u0107 element\u00f3w w tablicy okre\u015bla kolejno\u015b\u0107 kolumn.<\/p>\n<p>To, co musisz zrobi\u0107, aby doda\u0107 now\u0105 kolumn\u0119, to po prostu dodanie nowej pary klucz + warto\u015b\u0107 do tablicy i zwr\u00f3cenie jej. Mo\u017cesz dowolnie manipulowa\u0107 tablic\u0105 \u2013 na przyk\u0142ad zmieniaj\u0105c jej kolejno\u015b\u0107.<\/p>\n<h2>Hak zawarto\u015bci kolumny<\/h2>\n<p>Kt\u00f3rego zaczepu nale\u017cy u\u017cy\u0107 do kontrolowania wyj\u015bcia zawarto\u015bci kolumny, zale\u017cy od tego, czy typ posta jest ustawiony jako hierarchiczny, czy nie. Hierarchiczny typ stanowiska zosta\u0142 zdefiniowany jak <code>'hierarchical' =&gt; true<\/code>w <code>register_post_type<\/code>. Wszelkie niehierarchiczne typy post\u00f3w, w tym wbudowany typ post\u00f3w WordPress \u201e <code>post<\/code>&#8222;, u\u017cywaj\u0105 nazwy haka <code>manage_{$post_type}_custom_column<\/code>. Wszelkie hierarchiczne typy post\u00f3w, w tym wbudowany typ posta WordPress \u201e <code>page<\/code>&#8222;, u\u017cywaj\u0105 nazwy haka <code>manage_pages_custom_column<\/code>(uwaga: brak wstrzykiwania nazwy typu posta w nazwie haka).<\/p>\n<p>Jako argumenty do tego haka otrzymasz nazw\u0119 kolumny, kt\u00f3ra jest kluczem wymienionym w powy\u017cszym filtrze kolumn (np. &#8217; <code>cb<\/code>&#8217; dla kolumny z polem wyboru), a po drugie identyfikator postu. Ten haczyk jest uruchamiany przy ka\u017cdym po\u015bcie, a podstawowym za\u0142o\u017ceniem jest to, \u017ce sprawdzasz, czy jeste\u015bmy w odpowiednim typie kolumny (za pomoc\u0105 klawisza), a je\u015bli tak, u\u017cyj identyfikatora posta, aby pobra\u0107 meta postu lub podobne i wy\u015blij, co chcesz.<\/p>\n<h2>Przyk\u0142ady<\/h2>\n<p>Sp\u00f3jrzmy na kod praktycznych przyk\u0142ad\u00f3w.<\/p>\n<h3>Dodaj niestandardow\u0105 kolumn\u0119 do post\u00f3w, kt\u00f3ra wy\u015bwietla niestandardow\u0105 meta postu<\/h3>\n<p>To najprostsze zastosowanie dodawania kolumn niestandardowych. Za\u0142\u00f3\u017cmy, \u017ce chcemy doda\u0107 niestandardow\u0105 kolumn\u0119 do wpisu typu \u201epost&#8221;. Chcemy, aby znajdowa\u0142 si\u0119 na samym ko\u0144cu kolumn, o nazwie \u201eZweryfikowany&#8221;, i powinien generowa\u0107 \u201eTak&#8221; lub \u201eNie&#8221; w zale\u017cno\u015bci od niestandardowej warto\u015bci meta postu. Uwaga: ten przyk\u0142ad nie obejmuje zapisywania ani aktualizowania niestandardowej meta postu.<\/p>\n<p>W naszym <code>functions.php<\/code>lub w dowolnym miejscu naszego motywu lub kodu wtyczki dodamy sam\u0105 kolumn\u0119, \u0142\u0105cz\u0105c j\u0105 z tablic\u0105 kolumn, a w haczyku dla danych wyj\u015bciowych kolumny pobieramy warto\u015b\u0107 meta postu i wypisujemy j\u0105.<\/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>Dane wyj\u015bciowe mog\u0105 by\u0107 dowolne, po prostu doda\u0142em <code>span<\/code>dane wyj\u015bciowe z r\u00f3\u017cnymi kolorami tekstu, aby u\u0142atwi\u0107 identyfikacj\u0119.<\/p>\n<h3>Dodaj niestandardow\u0105 kolumn\u0119 do hierarchicznego niestandardowego typu wpisu, kt\u00f3ry wy\u015bwietla wpis przodka<\/h3>\n<p>Gdy typ wpisu jest hierarchiczny, wpisy mog\u0105 mie\u0107 wpisy nadrz\u0119dne. Za\u0142\u00f3\u017cmy, \u017ce mamy hierarchiczny, niestandardowy typ wpis\u00f3w \u201e <code>subject<\/code>&#8221; dla przedmiot\u00f3w szkolnych, w kt\u00f3rych jest zwyczajem publikowanie wielu wpis\u00f3w dla dzieci, a nawet wpis\u00f3w dla dzieci. Dla lepszego przegl\u0105du chcemy doda\u0107 kolumn\u0119, kt\u00f3ra wy\u015bwietla rodzica przodka posta (\u201etemat g\u0142\u00f3wny&#8221;). Je\u015bli post jest postem najwy\u017cszego poziomu, wy\u015bwietlany jest prosty \u201e-&#8222;, w przeciwnym razie kolumna wy\u015bwietla tytu\u0142 posta nadrz\u0119dnego przodka w linku do edycji posta.<\/p>\n<p>Poniewa\u017c odwo\u0142ujemy si\u0119 do hierarchicznego typu wpisu, musimy u\u017cy\u0107 innego zaczepu do wyprowadzania zawarto\u015bci kolumny ni\u017c w powy\u017cszym przyk\u0142adzie, ale proces jest dok\u0142adnie taki sam.<\/p>\n<p>Ten kod pokazuje r\u00f3wnie\u017c przyk\u0142ad, jak wstrzykn\u0105\u0107 kolumn\u0119 do \u015brodka tablicy kolumn. Definiujemy, \u017ce nasza kolumna powinna znajdowa\u0107 si\u0119 przed 'autorem&#8217; i u\u017cywamy funkcji tablicowych PHP, aby wstawi\u0107 element we w\u0142a\u015bciwej pozycji.<\/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>Usuwanie kolumny<\/h3>\n<p>Usuni\u0119cie kolumny z typu posta jest do\u015b\u0107 proste; wystarczy przefiltrowa\u0107 kolumny post\u00f3w, usun\u0105\u0107 element z tablicy i zwr\u00f3ci\u0107 go. Nie musisz podpina\u0107 si\u0119 pod zaczep wyj\u015bciowy kolumny. Na przyk\u0142ad; usuni\u0119cie domy\u015blnej <code>date<\/code>kolumny \u201e &#8221; z typu postu \u201e <code>post<\/code>&#8222;:<\/p>\n<pre><code>add_filter('manage_post_posts_columns', function($columns) {\n    unset($columns['date']);\n    return $columns;\n});<\/code><\/pre>\n<h3>Zmiana domy\u015blnych nazw lub pozycji kolumn<\/h3>\n<p>Za\u0142\u00f3\u017cmy, \u017ce mamy niestandardowy typ posta \u201e <code>book<\/code>&#8221; i chcemy zast\u0105pi\u0107 domy\u015bln\u0105 nazw\u0119 kolumny \u201eAutor&#8221; nazw\u0105 \u201eWydawca&#8221;. Po prostu filtrujemy filtr kolumn i nadajemy kluczowi \u201e <code>author<\/code>&#8221; inn\u0105 warto\u015b\u0107:<\/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>Zmiana kolejno\u015bci kolumn mo\u017ce by\u0107 wykonana za pomoc\u0105 funkcji tablicowych PHP. Pami\u0119taj, \u017ce wynikowa tablica musi by\u0107 tablic\u0105 asocjacyjn\u0105 z kolumn\u0105 \u201eID&#8221; jako kluczami i ich etykiet\u0105 jako warto\u015bciami. Oto prosty przyk\u0142ad wyj\u0119cia <code>author<\/code>kolumny \u201e &#8221; i umieszczenia jej na samym ko\u0144cu, zmieniaj\u0105c w ten spos\u00f3b kolejno\u015b\u0107 kolumn:<\/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>Ustawianie niestandardowej kolumny jako mo\u017cliwej do sortowania<\/h3>\n<p>Domy\u015blnie niekt\u00f3re kolumny WordPressa mo\u017cna sortowa\u0107, na przyk\u0142ad tytu\u0142 posta, liczba komentarzy i data. Mo\u017cliwe jest sortowanie niestandardowej kolumny, ale wymaga to nieco wi\u0119cej kodu i podpi\u0119cia si\u0119 pod hak zapytania postu WordPress, aby poinformowa\u0107 WordPressa, jak zamawia\u0107 wed\u0142ug meta postu.<\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce mamy niestandardowy typ posta \u201e <code>movie<\/code>&#8222;, a za pomoc\u0105 poni\u017cszego kodu dodajemy niestandardow\u0105 kolumn\u0119, kt\u00f3ra wy\u015bwietla niestandardow\u0105 meta posta \u201e <code>duration<\/code>&#8222;.<\/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>Aby powiedzie\u0107 WordPressowi, \u017ce chcemy, aby nasza kolumna by\u0142a mo\u017cliwa do sortowania, musimy podpi\u0105\u0107 si\u0119 pod filtr <code>manage_edit-{$post_type}_sortable_columns<\/code>. Dodajemy nasz\u0105 kolumn\u0119 do tablicy kolumn, kt\u00f3r\u0105 mo\u017cna filtrowa\u0107, a nast\u0119pnie okre\u015blamy, jaka <code>orderby<\/code>powinna by\u0107 warto\u015b\u0107 \u201e &#8222;. Ustawiamy tam unikaln\u0105 warto\u015b\u0107 niestandardow\u0105 \u2013 tak\u0105 sam\u0105 nazw\u0119 jak nasza kolumna \u2013 do kt\u00f3rej mo\u017cemy si\u0119 p\u00f3\u017aniej odwo\u0142a\u0107 w naszym haczyku zapytania.<\/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>Je\u015bli od\u015bwie\u017cysz teraz WordPress, powiniene\u015b zobaczy\u0107, \u017ce nasza niestandardowa kolumna jest rzeczywi\u015bcie klikalna i mo\u017cliwa do sortowania, ale nie jest poprawnie sortowana. Dzieje si\u0119 tak, poniewa\u017c WordPress nie rozumie \u201e <code>duration<\/code>&#8221; jako warto\u015bci \u201e <code>orderby<\/code>&#8222;. To naprawimy, do\u0142\u0105czaj\u0105c do \u201e <code>pre_get_posts<\/code>&#8222;:<\/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>Poniewa\u017c nasza niestandardowa meta posta \u201e <code>duration<\/code>&#8221; zawsze b\u0119dzie liczb\u0105, mo\u017cemy zdefiniowa\u0107 \u201e <code>orderby<\/code>&#8221; jako \u201e <code>meta_value_num<\/code>&#8221; w celu por\u00f3wnania liczb. Dostosuj argumenty zapytania, aby pasowa\u0142y do \u200b\u200bniestandardowych warto\u015bci meta postu.<\/p>\n<h3>Wy\u0142\u0105cz sortowanie dla domy\u015blnych kolumn<\/h3>\n<p>Wy\u0142\u0105czenie sortowania dla domy\u015blnej kolumny jest do\u015b\u0107 proste. Wszystko, co musimy zrobi\u0107, to pod\u0142\u0105czy\u0107 si\u0119 do filtra <code>manage_edit-{$post_type}_sortable_columns<\/code>i usun\u0105\u0107 z tablicy kolumn\u0119, wed\u0142ug kt\u00f3rej nie chcemy sortowa\u0107. Na przyk\u0142ad usuwa sortowanie dla kolumny daty dla typu posta \u201e <code>post<\/code>&#8222;.<\/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\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ten post szczeg\u00f3\u0142owo opisuje, jak modyfikowa\u0107 lub dodawa\u0107 kolumny do listy post\u00f3w, stron lub dowolnego niestandardowego typu postu w panelu administracyjnym 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":[588,721,516,897,1110,805,524,836,506,845,509,515,866],"tags":[1169],"class_list":["post-233312","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code","category-deweloper","category-software-entwicklung","category-kod","category-n-a","category-php-7","category-php","category-przewodnik-dla-poczatkujacych","category-ratgeber-fuer-anfaenger","category-samouczki","category-tutorials","category-wordpress","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=233312"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233312\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/223841"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}