{"id":233527,"date":"2023-02-16T18:37:00","date_gmt":"2023-02-16T15:37:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233527"},"modified":"2022-11-11T00:11:03","modified_gmt":"2022-11-10T21:11:03","slug":"samouczek-jak-dodac-niestandardowa-akcje-zbiorcza-w-wordpress-admin","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/samouczek-jak-dodac-niestandardowa-akcje-zbiorcza-w-wordpress-admin\/","title":{"rendered":"Samouczek: Jak doda\u0107 niestandardow\u0105 akcj\u0119 zbiorcz\u0105 w WordPress Admin"},"content":{"rendered":"\n<p>Nad wi\u0119kszo\u015bci\u0105 tabel element\u00f3w w administratorze WordPressa (np. post\u00f3w, stron, komentarzy, wtyczek i u\u017cytkownik\u00f3w) znajdziesz funkcjonalno\u015b\u0107 WordPressa dla dzia\u0142a\u0144 zbiorczych. Akcje zbiorcze pozwalaj\u0105 na zaznaczenie wielu element\u00f3w, wybranie akcji i wykonanie tej akcji dla wszystkich element\u00f3w jednocze\u015bnie. W tym po\u015bcie przyjrzymy si\u0119, jak doda\u0107 w\u0142asne niestandardowe akcje zbiorcze do administratora WordPress.<\/p>\n<p>Dodanie niestandardowej akcji zbiorczej sta\u0142o si\u0119 znacznie \u0142atwiejsze w ostatnich wersjach WordPressa (od wersji 4.7). Istnieje filtr dla opcji dost\u0119pnych w menu rozwijanym; inny filtr okre\u015blaj\u0105cy, co powinien zrobi\u0107, gdy wybrana jest twoja opcja, i kolejny haczyk do opcjonalnego wy\u015bwietlania powiadomienia administratora. Przyjrzyjmy si\u0119 ka\u017cdemu z nich.<\/p>\n<h2>Dodawanie niestandardowej akcji zbiorczej w menu rozwijanym<\/h2>\n<p>Zacznijmy od dodania naszego niestandardowego wyboru zbiorczego do listy rozwijanej akcji zbiorczej. W tym celu u\u017cywamy filtra <code>bulk_actions_&lt;screen&gt;<\/code>, w kt\u00f3rym zast\u0119pujesz dowolny ekran administratora, do kt\u00f3rego chcesz doda\u0107 swoj\u0105 opcj\u0119. Oto pe\u0142ny przegl\u0105d mo\u017cliwych opcji ekranu:<\/p>\n<ul>\n<li><code>bulk_actions-edit-post<\/code>: Ekran edycji typu posta 'post&#8217;<\/li>\n<li><code>bulk_actions-edit-page<\/code>: Ekran edycji typu posta 'strona&#8217;<\/li>\n<li><code>bulk_actions-edit-&lt;post-type-name&gt;<\/code>: Niestandardowy ekran edycji typu postu<\/li>\n<li><code>bulk_actions-edit-&lt;custom-taxonomy&gt;<\/code>: Ekran edycji niestandardowej taksonomii<\/li>\n<li><code>bulk_actions-edit-comments<\/code>: Ekran listy komentarzy<\/li>\n<li><code>bulk_actions-plugins<\/code>: Ekran listy wtyczek<\/li>\n<li><code>bulk_actions-users<\/code>: Ekran listy u\u017cytkownik\u00f3w<\/li>\n<li><code>bulk_actions-upload<\/code>: Lista biblioteki multimedi\u00f3w (dzia\u0142a tylko w widoku listy, nie w widoku siatki)<\/li>\n<\/ul>\n<p>Filtr jest stosowany do tablicy z parami klucz-warto\u015b\u0107; gdzie klucze s\u0105 unikalnym kluczem do dzia\u0142a\u0144, a warto\u015bci s\u0105 etykietami, kt\u00f3re pojawiaj\u0105 si\u0119 w menu.<\/p>\n<p>Sp\u00f3jrzmy na przyk\u0142ad. Chc\u0119 utworzy\u0107 akcj\u0119 zbiorcz\u0105 do ustawiania post\u00f3w do opublikowania.<\/p>\n<pre><code>add_filter('bulk_actions-edit-post', function($bulk_actions) {\n    $bulk_actions['change-to-published'] = __('Change to published', 'txtdomain');\n    return $bulk_actions;\n});<\/code><\/pre>\n<p>Je\u015bli zapiszesz i od\u015bwie\u017cysz ekran edycji post\u00f3w, powiniene\u015b zobaczy\u0107 swoj\u0105 opcj\u0119 w menu rozwijanym.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153003-61e50168c2dcc.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-153003-61e50168c2dcc.png\" alt=\"Samouczek: Jak doda\u0107 niestandardow\u0105 akcj\u0119 zbiorcz\u0105 w WordPress Admin\" ><\/a><\/p>\n<p>W tej chwili nasza niestandardowa akcja zbiorcza robi absolutnie zip. To kolejny krok.<\/p>\n<h2>Sprawianie, \u017ce nasze niestandardowe dzia\u0142anie zbiorcze co\u015b robi<\/h2>\n<p>Aby co\u015b wywo\u0142a\u0107, wybieraj\u0105c nasz\u0105 nowo dodan\u0105 opcj\u0119 w dropwonie, podpinamy si\u0119 pod filtr <code>handle_bulk_actions-&lt;screen&gt;<\/code>. Zapoznaj si\u0119 z powy\u017cszym przegl\u0105dem, aby pozna\u0107 mo\u017cliwe warto\u015bci ekranu. Oczywi\u015bcie hak uchwytu powinien by\u0107 tym samym ekranem, co ekran, na kt\u00f3rym dodano akcj\u0119 zbiorcz\u0105 w pierwszym kroku.<\/p>\n<p>W tym filtrze masz trzy mo\u017cliwe argumenty. Pierwszy \u2013 ten, kt\u00f3ry zwracasz \u2013 jest w rzeczywisto\u015bci adresem URL, do kt\u00f3rego WordPress powinien przekierowa\u0107 po zako\u0144czeniu dzia\u0142ania zbiorczego. Drugi argument to nazwa akcji, kt\u00f3ra zosta\u0142a wybrana z listy rozwijanej. Trzecia to tablica wszystkich identyfikator\u00f3w element\u00f3w, kt\u00f3re zosta\u0142y sprawdzone pod k\u0105tem dzia\u0142ania zbiorczego. To s\u0105 elementy, na kt\u00f3re musimy zastosowa\u0107 nasze dzia\u0142anie.<\/p>\n<pre><code>add_filter('handle_bulk_actions-edit-post', function($redirect_url, $action, $post_ids) {\n    if ($action == 'change-to-published') {\n        foreach ($post_ids as $post_id) {\n            wp_update_post([\n                'ID' =&gt; $post_id,\n                'post_status' =&gt; 'publish'\n            ]);\n        }\n        $redirect_url = add_query_arg('changed-to-published', count($post_ids), $redirect_url);\n    }\n    return $redirect_url;\n}, 10, 3);<\/code><\/pre>\n<p>Przyjrzyjmy si\u0119 krok po kroku, co robi powy\u017cszy kod. Najpierw musimy sprawdzi\u0107, czy wykonana akcja zbiorcza by\u0142a rzeczywi\u015bcie nasz\u0105 niestandardow\u0105 akcj\u0105; <code>change-to-published<\/code>. A potem to od nas zale\u017cy, czy zrobimy, co zechcemy, ze wszystkimi identyfikatorami.<\/p>\n<p>Powy\u017cszy kod zap\u0119tla si\u0119 przez wszystkie identyfikatory post\u00f3w i wykonuje <code>wp_update_post()<\/code>na ka\u017cdym z nich, aby zmieni\u0107 status posta na opublikowany. (Je\u015bli chcesz, aby by\u0142o to wydajne, mo\u017cesz rozwa\u017cy\u0107 aktualizacj\u0119 tylko tych, kt\u00f3re rzeczywi\u015bcie nie zosta\u0142y jeszcze opublikowane).<\/p>\n<p>Po wykonaniu naszej akcji na wybranych elementach, musimy zbudowa\u0107 adres URL, na kt\u00f3ry zostanie przekierowany po zako\u0144czeniu dzia\u0142ania WordPressa. Do podanego adresu URL przekierowania dodajemy niestandardowy argument. Jest to opcjonalne, ale konieczne, je\u015bli chcemy wy\u015bwietli\u0107 powiadomienie administratora. Mo\u017cemy doda\u0107 co tylko zechcesz. Ale w powy\u017cszym przyk\u0142adzie po prostu dodajemy nowy argument zapytania z <code>add_query_arg()<\/code>ustawieniem \u201e <code>changed-to-published<\/code>&quot; do liczby identyfikator\u00f3w post\u00f3w, kt\u00f3rych dotyczy problem. Jest to przydatna informacja do zawiadomienia.<\/p>\n<h2>Poka\u017c powiadomienie po wykonaniu niestandardowego dzia\u0142ania zbiorczego<\/h2>\n<p>Je\u015bli wykonasz teraz nasz\u0105 niestandardow\u0105 akcj\u0119 zbiorcz\u0105, zauwa\u017cysz, \u017ce po zako\u0144czeniu akcji zbiorczej WordPress ponownie za\u0142aduje stron\u0119 z nast\u0119puj\u0105cym adresem URL: \u201ewp-admin\/edit.php?changed-to-published=2&#8243;. \u201e2&#8243; to liczba post\u00f3w, w kt\u00f3rych zastosowali\u015bmy nasze dzia\u0142anie. To pozwala nam doda\u0107 niestandardowe powiadomienie administratora, kt\u00f3re jest wyzwalane, je\u015bli ustawiono \u201ezmieniono na opublikowane&#8221;.<\/p>\n<p>W celu wy\u015bwietlenia powiadomie\u0144 administratora mo\u017cemy u\u017cy\u0107 akcji <code>admin_notices<\/code>. Sprawdzamy zmienn\u0105 globaln\u0105 PHP <code>$_REQUEST<\/code>, kt\u00f3ra jest wype\u0142niana warto\u015bciami przes\u0142anymi z formularza, je\u015bli <code>changed-to-published<\/code>istnieje &#8217; &#8217;. Je\u015bli tak, oznacza to, \u017ce w\u0142a\u015bnie wykonano nasze niestandardowe dzia\u0142anie zbiorcze. Wy\u015bwietlimy wtedy tekst zawieraj\u0105cy liczb\u0119 zastosowanych post\u00f3w.<\/p>\n<pre><code>add_action('admin_notices', function() {\n    if (!empty($_REQUEST['changed-to-published'])) {\n        $num_changed = (int) $_REQUEST['changed-to-published'];\n        printf('&lt;div id=\"message\" class=\"updated notice is-dismissable\"&gt;&lt;p&gt;'. __('Published %d posts.', 'txtdomain'). '&lt;\/p&gt;&lt;\/div&gt;', $num_changed);\n    }\n});<\/code><\/pre>\n<p>I to wszystko!<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153003-61e50169c2e34.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-153003-61e50169c2e34.png\" alt=\"Samouczek: Jak doda\u0107 niestandardow\u0105 akcj\u0119 zbiorcz\u0105 w WordPress Admin\" ><\/a><\/p>\n<h2>Inne zastosowania niestandardowej akcji zbiorczej<\/h2>\n<p>Pami\u0119taj, \u017ce w <code>handle_bulk_actions-&lt;screen&gt;<\/code>haczyku mo\u017cesz zrobi\u0107 w zasadzie wszystko, co chcesz na wybranych elementach. Mo\u017cesz zaktualizowa\u0107 niestandardow\u0105 meta postu, zmieni\u0107 role u\u017cytkownik\u00f3w, wys\u0142a\u0107 wiadomo\u015b\u0107 e-mail lub opublikowa\u0107 \u017c\u0105danie HTTP do aplikacji innej firmy.<\/p>\n<p>Na przyk\u0142ad; je\u015bli chcesz, aby akcja zbiorcza aktualizowa\u0142a niestandardow\u0105 meta postu, kt\u00f3ra informuje, czy posty s\u0105 weryfikowane, czy nie, u\u017cyj niestandardowej akcji zbiorczej z kluczem \u201e <code>mark-as-verified<\/code>&#8222;:<\/p>\n<pre><code>add_filter('handle_bulk_actions-edit-post', function($redirect_url, $action, $post_ids) {\n    if ($action == 'mark-as-verified') {\n        foreach ($post_ids as $post_id) {\n            update_post_meta($post_id, 'verified', '1');\n        }\n        $redirect_url = add_query_arg('mark-as-verified', count($post_ids), $redirect_url);\n    }\n    return $redirect_url;\n}, 10, 3);<\/code><\/pre>\n<p>Po\u0142\u0105cz powy\u017csze z niestandardow\u0105 kolumn\u0105, kt\u00f3ra pokazuje warto\u015b\u0107 \u201ezweryfikowany&#8221; na listach post\u00f3w \u2013 tak jak <a href=\"https:\/\/awhitepixel.com\/blog\/how-to-modify-or-add-custom-columns-to-post-list-in-wordpress-admin\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">zrobili\u015bmy to w tym po\u015bcie<\/a>, a staje si\u0119 to bardzo przydatne.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153003-61e5016adc6a5.gif\" 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-153003-61e5016adc6a5.gif\" alt=\"Samouczek: Jak doda\u0107 niestandardow\u0105 akcj\u0119 zbiorcz\u0105 w WordPress Admin\" ><\/a><\/p>\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>W tym po\u015bcie przyjrzymy si\u0119, jak doda\u0107 niestandardow\u0105 akcj\u0119 zbiorcz\u0105 do administratora WordPress &#8211; kt\u00f3r\u0105 mo\u017cna doda\u0107 do listy post\u00f3w, komentarzy, u\u017cytkownik\u00f3w i ekran\u00f3w wtyczek,<\/p>\n","protected":false},"author":1,"featured_media":221177,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[897,721,721,919,897,919,1110,805,805,845,845,866,866],"tags":[1169],"class_list":{"0":"post-233527","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-kod","8":"category-deweloper","10":"category-inny","13":"category-n-a","14":"category-php-7","16":"category-samouczki","18":"category-wordpress-7","20":"tag-affiai-pl"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233527","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=233527"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233527\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/221177"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233527"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233527"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}