{"id":233506,"date":"2023-02-16T18:43:00","date_gmt":"2023-02-16T15:43:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233506"},"modified":"2022-11-11T00:03:50","modified_gmt":"2022-11-10T21:03:50","slug":"handledning-hur-man-laegger-till-en-anpassad-bulkaatgaerd-i-wordpress-admin","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/handledning-hur-man-laegger-till-en-anpassad-bulkaatgaerd-i-wordpress-admin\/","title":{"rendered":"Handledning: Hur man l\u00e4gger till en anpassad bulk\u00e5tg\u00e4rd i WordPress Admin"},"content":{"rendered":"\n<p>Ovanf\u00f6r de flesta tabeller med element i WordPress admin (t.ex. inl\u00e4gg, sidor, kommentarer, plugins och anv\u00e4ndare) hittar du WordPress funktionalitet f\u00f6r bulk\u00e5tg\u00e4rder. Med bulk\u00e5tg\u00e4rder kan du bocka av flera element, v\u00e4lja en \u00e5tg\u00e4rd och f\u00e5 den \u00e5tg\u00e4rden att utf\u00f6ras f\u00f6r alla element samtidigt. I det h\u00e4r inl\u00e4gget kommer vi att titta p\u00e5 hur vi l\u00e4gger till v\u00e5ra egna anpassade mass\u00e5tg\u00e4rder till WordPress admin.<\/p>\n<p>Att l\u00e4gga till en anpassad mass\u00e5tg\u00e4rd har blivit mycket enklare i de senaste versionerna av WordPress (sedan 4.7). Det finns ett filter f\u00f6r alternativen i rullgardinsmenyn; ett annat filter f\u00f6r vad det ska g\u00f6ra n\u00e4r ditt alternativ \u00e4r valt, och en annan krok f\u00f6r att eventuellt visa ett adminmeddelande. L\u00e5t oss g\u00e5 igenom var och en av dessa.<\/p>\n<h2>L\u00e4gger till en anpassad mass\u00e5tg\u00e4rd i rullgardinsmenyn<\/h2>\n<p>L\u00e5t oss b\u00f6rja med att l\u00e4gga till v\u00e5rt anpassade bulkval i rullgardinsmenyn f\u00f6r bulk\u00e5tg\u00e4rder. F\u00f6r detta anv\u00e4nder vi filtret <code>bulk_actions_&lt;screen&gt;<\/code>, d\u00e4r du ers\u00e4tter med vilken adminsk\u00e4rm du vill att ditt alternativ ska l\u00e4ggas till. H\u00e4r \u00e4r en fullst\u00e4ndig \u00f6versikt \u00f6ver m\u00f6jliga alternativ f\u00f6r sk\u00e4rmen:<\/p>\n<ul>\n<li><code>bulk_actions-edit-post<\/code>: Inl\u00e4ggstyp &#8217;post&#8217; redigeringssk\u00e4rm<\/li>\n<li><code>bulk_actions-edit-page<\/code>: Inl\u00e4ggstyp &#8217;sida&#8217; redigeringssk\u00e4rm<\/li>\n<li><code>bulk_actions-edit-&lt;post-type-name&gt;<\/code>: Redigeringssk\u00e4rm f\u00f6r anpassad inl\u00e4ggstyp<\/li>\n<li><code>bulk_actions-edit-&lt;custom-taxonomy&gt;<\/code>: Redigeringssk\u00e4rm f\u00f6r anpassad taxonomi<\/li>\n<li><code>bulk_actions-edit-comments<\/code>: Sk\u00e4rmen med kommentarslistan<\/li>\n<li><code>bulk_actions-plugins<\/code>: Sk\u00e4rmen med pluginlistan<\/li>\n<li><code>bulk_actions-users<\/code>: Sk\u00e4rmen med anv\u00e4ndarlista<\/li>\n<li><code>bulk_actions-upload<\/code>: Mediabibliotekslista (fungerar bara i listvy, inte rutn\u00e4tsvy)<\/li>\n<\/ul>\n<p>Filtret appliceras p\u00e5 en array med nyckel-v\u00e4rdepar; d\u00e4r nycklar \u00e4r en unik nyckel f\u00f6r \u00e5tg\u00e4rder och v\u00e4rden \u00e4r etiketten som visas i rullgardinsmenyn.<\/p>\n<p>L\u00e5t oss titta p\u00e5 ett exempel. Jag vill skapa en mass\u00e5tg\u00e4rd f\u00f6r att publicera inl\u00e4gg.<\/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>Om du sparar och uppdaterar redigeringssk\u00e4rmen f\u00f6r inl\u00e4gg b\u00f6r du se ditt alternativ i rullgardinsmenyn.<\/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=\"Handledning: Hur man l\u00e4gger till en anpassad bulk\u00e5tg\u00e4rd i WordPress Admin\" ><\/a><\/p>\n<p>Fr\u00e5n och med just nu \u00e4r v\u00e5r anpassade bulk-\u00e5tg\u00e4rd helt zippad. Det \u00e4r n\u00e4sta steg.<\/p>\n<h2>Att f\u00e5 v\u00e5r anpassade mass\u00e5tg\u00e4rd att g\u00f6ra n\u00e5got<\/h2>\n<p>F\u00f6r att trigga n\u00e5got n\u00e4r vi v\u00e4ljer v\u00e5rt nytillkomna alternativ i dropwon hakar vi p\u00e5 filtret <code>handle_bulk_actions-&lt;screen&gt;<\/code>. Se \u00f6versikten ovan f\u00f6r m\u00f6jliga sk\u00e4rmv\u00e4rden. Sj\u00e4lvklart ska din handtagskrok vara samma sk\u00e4rm som sk\u00e4rmen d\u00e4r du lade till bulk\u00e5tg\u00e4rden i det f\u00f6rsta steget.<\/p>\n<p>Du har tre m\u00f6jliga argument i detta filter. Den f\u00f6rsta \u2013 den du returnerar \u2013 \u00e4r faktiskt en webbadress som WordPress ska omdirigera till efter att den \u00e4r klar med din mass\u00e5tg\u00e4rd. Det andra argumentet \u00e4r namnet p\u00e5 \u00e5tg\u00e4rden som valdes i rullgardinsmenyn. Och f\u00f6r det tredje \u00e4r en upps\u00e4ttning av alla element-ID:n som kontrollerades f\u00f6r bulk\u00e5tg\u00e4rden. Det h\u00e4r \u00e4r de element vi beh\u00f6ver till\u00e4mpa v\u00e5r handling p\u00e5.<\/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>L\u00e5t oss titta p\u00e5 vad ovanst\u00e5ende kod g\u00f6r steg f\u00f6r steg. F\u00f6rst m\u00e5ste vi kontrollera om den utf\u00f6rda bulk\u00e5tg\u00e4rden verkligen var v\u00e5r anpassade \u00e5tg\u00e4rd; <code>change-to-published<\/code>. Och sedan \u00e4r det upp till oss att g\u00f6ra vad vi vill med alla ID:n.<\/p>\n<p>Koden ovan g\u00e5r igenom alla inl\u00e4ggs-ID:n och utf\u00f6r <code>wp_update_post()<\/code>p\u00e5 var och en f\u00f6r att \u00e4ndra deras inl\u00e4ggsstatus till publicerad. (Om du vill att detta ska vara effektivt kan du \u00f6verv\u00e4ga att bara uppdatera de som faktiskt inte redan \u00e4r publicerade).<\/p>\n<p>N\u00e4r vi \u00e4r klara med att g\u00f6ra v\u00e5r \u00e5tg\u00e4rd p\u00e5 de valda elementen m\u00e5ste vi bygga en URL att omdirigera till efter att WordPress \u00e4r klart. Vi l\u00e4gger till ett anpassat argument till den angivna omdirigeringsadressen. Detta \u00e4r valfritt men n\u00f6dv\u00e4ndigt om vi vill visa ett adminmeddelande. Vi kan l\u00e4gga till vad du vill. Men i exemplet ovan l\u00e4gger vi helt enkelt till en ny fr\u00e5ge-arg med <code>add_query_arg()<\/code>inst\u00e4llningen &#8217; <code>changed-to-published<\/code>&#8217; till antalet inl\u00e4ggs-ID:n som p\u00e5verkades. Detta \u00e4r anv\u00e4ndbar information f\u00f6r ett meddelande.<\/p>\n<h2>Visa ett meddelande efter att v\u00e5r anpassade mass\u00e5tg\u00e4rd \u00e4r gjord<\/h2>\n<p>Om du utf\u00f6r v\u00e5r anpassade mass\u00e5tg\u00e4rd nu kommer du att m\u00e4rka att efter att WordPress har slutf\u00f6rt mass\u00e5tg\u00e4rden laddar den om sidan med f\u00f6ljande i URL:en: &quot;wp-admin\/edit.php?changed-to-published=2&quot;. &quot;2&quot; \u00e4r antalet inl\u00e4gg som vi till\u00e4mpade v\u00e5r \u00e5tg\u00e4rd p\u00e5. Detta g\u00f6r att vi kan l\u00e4gga till ett anpassat adminmeddelande som utl\u00f6ses om &quot;\u00e4ndrat-till-publicerat&quot; \u00e4r inst\u00e4llt.<\/p>\n<p>F\u00f6r att visa adminmeddelanden kan vi anv\u00e4nda \u00e5tg\u00e4rden <code>admin_notices<\/code>. Vi kontrollerar PHP:s globala variabel, <code>$_REQUEST<\/code>, som \u00e4r fyllda med formul\u00e4rinl\u00e4mnade v\u00e4rden om &#8217; <code>changed-to-published<\/code>&#8217; finns. Om den g\u00f6r det betyder det att v\u00e5r anpassade mass\u00e5tg\u00e4rd just utf\u00f6rdes. Vi kommer d\u00e5 att visa lite text inklusive antalet ans\u00f6kta inl\u00e4gg.<\/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>Och det \u00e4r allt!<\/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=\"Handledning: Hur man l\u00e4gger till en anpassad bulk\u00e5tg\u00e4rd i WordPress Admin\" ><\/a><\/p>\n<h2>Andra anv\u00e4ndningsomr\u00e5den f\u00f6r anpassade bulk\u00e5tg\u00e4rder<\/h2>\n<p>T\u00e4nk p\u00e5 att i <code>handle_bulk_actions-&lt;screen&gt;<\/code>kroken kan du g\u00f6ra i princip vad du vill p\u00e5 de valda elementen. Du kan uppdatera anpassad inl\u00e4ggsmeta, \u00e4ndra roller p\u00e5 anv\u00e4ndare, skicka ett e-postmeddelande eller skicka en HTTP-f\u00f6rfr\u00e5gan till n\u00e5gon tredjepartsapp.<\/p>\n<p>Till exempel; om du ville ha en mass\u00e5tg\u00e4rd f\u00f6r att uppdatera en anpassad inl\u00e4ggsmeta som informerar om inl\u00e4gg \u00e4r verifierade eller inte, med hj\u00e4lp av en anpassad mass\u00e5tg\u00e4rd med nyckeln &#8217; <code>mark-as-verified<\/code>&#8217;:<\/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>Kombinera ovanst\u00e5ende med en anpassad kolumn som visar v\u00e4rdet av &quot;verifierad&quot; i inl\u00e4ggslistor \u2013 som <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\">vi gjorde i det h\u00e4r inl\u00e4gget<\/a>, och det blir extra anv\u00e4ndbart.<\/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=\"Handledning: Hur man l\u00e4gger till en anpassad bulk\u00e5tg\u00e4rd i WordPress Admin\" ><\/a><\/p>\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>I det h\u00e4r inl\u00e4gget ska vi titta p\u00e5 hur man l\u00e4gger till en anpassad mass\u00e5tg\u00e4rd till WordPress-administrat\u00f6ren &#8211; som kan l\u00e4ggas till i inl\u00e4ggslistan, kommentarer, anv\u00e4ndare och pluginssk\u00e4rmar,<\/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":[901,724,848,901,922,1110,922,807,807,848,724,868,868],"tags":[1173],"class_list":["post-233506","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koda","category-utvecklaren","category-handledningar","category-oevrig","category-n-a","category-php-9","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233506","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=233506"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233506\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/221177"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=233506"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=233506"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=233506"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}