{"id":233554,"date":"2023-02-16T18:39:00","date_gmt":"2023-02-16T15:39:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233554"},"modified":"2022-11-11T00:19:20","modified_gmt":"2022-11-10T21:19:20","slug":"tutorial-como-adicionar-uma-acao-em-massa-personalizada-no-wordpress-admin","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/tutorial-como-adicionar-uma-acao-em-massa-personalizada-no-wordpress-admin\/","title":{"rendered":"Tutorial: Como adicionar uma a\u00e7\u00e3o em massa personalizada no WordPress Admin"},"content":{"rendered":"\n<p>Acima da maioria das tabelas de elementos de administra\u00e7\u00e3o do WordPress (por exemplo, posts, p\u00e1ginas, coment\u00e1rios, plugins e usu\u00e1rios), voc\u00ea encontrar\u00e1 a funcionalidade do WordPress para a\u00e7\u00f5es em massa. As a\u00e7\u00f5es em massa permitem que voc\u00ea marque v\u00e1rios elementos, escolha uma a\u00e7\u00e3o e execute essa a\u00e7\u00e3o para todos os elementos de uma s\u00f3 vez. Neste post, veremos como adicionar nossas pr\u00f3prias a\u00e7\u00f5es personalizadas em massa ao administrador do WordPress.<\/p>\n<p>Adicionar uma a\u00e7\u00e3o em massa personalizada se tornou muito mais f\u00e1cil nas vers\u00f5es recentes do WordPress (desde 4.7). H\u00e1 um filtro para as op\u00e7\u00f5es dispon\u00edveis na lista suspensa; outro filtro para o que deve fazer quando sua op\u00e7\u00e3o for escolhida e outro gancho para mostrar opcionalmente um aviso do administrador. Vamos passar por cada um deles.<\/p>\n<h2>Adicionando uma a\u00e7\u00e3o em massa personalizada na lista suspensa<\/h2>\n<p>Vamos come\u00e7ar adicionando nossa escolha em massa personalizada \u00e0 lista suspensa de a\u00e7\u00f5es em massa. Para isso, usamos o filtro <code>bulk_actions_&lt;screen&gt;<\/code>, onde voc\u00ea substitui por qualquer tela de administrador \u00e0 qual deseja que sua op\u00e7\u00e3o seja adicionada. Aqui est\u00e1 uma vis\u00e3o geral completa das op\u00e7\u00f5es poss\u00edveis para a tela:<\/p>\n<ul>\n<li><code>bulk_actions-edit-post<\/code>: Tela de edi\u00e7\u00e3o do tipo de post &#8216;post&#8217;<\/li>\n<li><code>bulk_actions-edit-page<\/code>: Tela de edi\u00e7\u00e3o do tipo de postagem &#8216;p\u00e1gina&#8217;<\/li>\n<li><code>bulk_actions-edit-&lt;post-type-name&gt;<\/code>: Tela de edi\u00e7\u00e3o de tipo de postagem personalizada<\/li>\n<li><code>bulk_actions-edit-&lt;custom-taxonomy&gt;<\/code>: Tela de edi\u00e7\u00e3o de taxonomia personalizada<\/li>\n<li><code>bulk_actions-edit-comments<\/code>: Tela da lista de coment\u00e1rios<\/li>\n<li><code>bulk_actions-plugins<\/code>: Tela da lista de plugins<\/li>\n<li><code>bulk_actions-users<\/code>: Tela da lista de usu\u00e1rios<\/li>\n<li><code>bulk_actions-upload<\/code>: Lista da biblioteca de m\u00eddia (s\u00f3 funciona no modo de exibi\u00e7\u00e3o de lista, n\u00e3o no modo de exibi\u00e7\u00e3o de grade)<\/li>\n<\/ul>\n<p>O filtro \u00e9 aplicado em uma matriz com pares de valores-chave; onde as chaves s\u00e3o uma chave exclusiva para a\u00e7\u00f5es e os valores s\u00e3o o r\u00f3tulo que aparece na lista suspensa.<\/p>\n<p>Vejamos um exemplo. Quero criar uma a\u00e7\u00e3o em massa para definir postagens como publicadas.<\/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>Se voc\u00ea salvar e atualizar a tela de edi\u00e7\u00e3o de postagens, dever\u00e1 ver sua op\u00e7\u00e3o no menu suspenso.<\/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=\"Tutorial: Como adicionar uma a\u00e7\u00e3o em massa personalizada no WordPress Admin\" ><\/a><\/p>\n<p>A partir de agora, nossa a\u00e7\u00e3o em massa personalizada est\u00e1 sendo absolutamente zip. Esse \u00e9 o pr\u00f3ximo passo.<\/p>\n<h2>Fazendo com que nossa a\u00e7\u00e3o em massa personalizada fa\u00e7a algo<\/h2>\n<p>Para acionar algo ao escolher nossa op\u00e7\u00e3o rec\u00e9m-adicionada no dropwon, conectamos o filtro <code>handle_bulk_actions-&lt;screen&gt;<\/code>. Consulte a vis\u00e3o geral acima para poss\u00edveis valores de tela. Obviamente, seu gancho de al\u00e7a deve ser a mesma tela que a tela na qual voc\u00ea adicionou a a\u00e7\u00e3o em massa na primeira etapa.<\/p>\n<p>Voc\u00ea tem tr\u00eas argumentos poss\u00edveis neste filtro. O primeiro \u2013 aquele que voc\u00ea retorna \u2013 \u00e9 na verdade um URL para o qual o WordPress deve redirecionar depois de terminar com sua a\u00e7\u00e3o em massa. O segundo argumento \u00e9 o nome da a\u00e7\u00e3o que foi escolhida na lista suspensa. E o terceiro \u00e9 uma matriz de todos os IDs de elemento que foram verificados para a a\u00e7\u00e3o em massa. Estes s\u00e3o os elementos sobre os quais precisamos aplicar nossa a\u00e7\u00e3o.<\/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>Vamos ver o que o c\u00f3digo acima faz passo a passo. Primeiro, precisamos verificar se a a\u00e7\u00e3o em massa executada foi realmente nossa a\u00e7\u00e3o personalizada; <code>change-to-published<\/code>. E ent\u00e3o cabe a n\u00f3s fazer o que quisermos com todos os IDs.<\/p>\n<p>O c\u00f3digo acima percorre todos os IDs de postagem e executa <code>wp_update_post()<\/code>em cada um para alterar seu status de postagem para publicado. (Se voc\u00ea quiser que isso seja eficiente, considere atualizar apenas aqueles que de fato ainda n\u00e3o foram publicados).<\/p>\n<p>Depois que terminarmos de fazer nossa a\u00e7\u00e3o nos elementos selecionados, precisamos criar uma URL para redirecionar depois que o WordPress for conclu\u00eddo. Adicionamos um argumento personalizado ao URL de redirecionamento fornecido. Isso \u00e9 opcional, mas necess\u00e1rio se quisermos mostrar um aviso do administrador. Podemos adicionar o que voc\u00ea quiser. Mas no exemplo acima estamos simplesmente adicionando um novo argumento de consulta com <code>add_query_arg()<\/code>a configura\u00e7\u00e3o &#8216; <code>changed-to-published<\/code>&#8216; para o n\u00famero de IDs de postagem que foram afetados. Esta \u00e9 uma informa\u00e7\u00e3o \u00fatil para um aviso.<\/p>\n<h2>Mostrar um aviso ap\u00f3s a conclus\u00e3o de nossa a\u00e7\u00e3o em massa personalizada<\/h2>\n<p>Se voc\u00ea executar nossa a\u00e7\u00e3o em massa personalizada agora, voc\u00ea notar\u00e1 que depois que o WordPress concluir a a\u00e7\u00e3o em massa, ele recarregar\u00e1 a p\u00e1gina com o seguinte na URL: &#8220;wp-admin\/edit.php?changed-to-published=2&quot;. &#8220;2&quot; \u00e9 o n\u00famero de postagens nas quais aplicamos nossa a\u00e7\u00e3o. Isso nos permite adicionar um aviso de administra\u00e7\u00e3o personalizado que \u00e9 acionado se &#8216;alterado para publicado&#8217; estiver definido.<\/p>\n<p>Para mostrar os avisos do administrador, podemos usar a a\u00e7\u00e3o <code>admin_notices<\/code>. Verificamos a vari\u00e1vel global do PHP, <code>$_REQUEST<\/code>, que \u00e9 preenchida com os valores enviados pelo formul\u00e1rio se &#8216; <code>changed-to-published<\/code>&#8216; existir. Se isso acontecer, isso significa que nossa a\u00e7\u00e3o em massa personalizada acabou de ser executada. Em seguida, exibiremos algum texto, incluindo o n\u00famero de postagens aplicadas.<\/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>E \u00e9 isso!<\/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=\"Tutorial: Como adicionar uma a\u00e7\u00e3o em massa personalizada no WordPress Admin\" ><\/a><\/p>\n<h2>Outros usos da a\u00e7\u00e3o em massa personalizada<\/h2>\n<p>Tenha em mente que no <code>handle_bulk_actions-&lt;screen&gt;<\/code>gancho voc\u00ea pode fazer basicamente o que quiser nos elementos selecionados. Voc\u00ea pode atualizar meta de postagem personalizada, alterar fun\u00e7\u00f5es nos usu\u00e1rios, enviar um e-mail ou postar uma solicita\u00e7\u00e3o HTTP para algum aplicativo de terceiros.<\/p>\n<p>Por exemplo; se voc\u00ea quiser que uma a\u00e7\u00e3o em massa atualize uma meta de postagem personalizada que informa se as postagens s\u00e3o verificadas ou n\u00e3o, usando uma a\u00e7\u00e3o em massa personalizada com a chave &#8216; <code>mark-as-verified<\/code>&#8216;:<\/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>Combine o acima com uma coluna personalizada que mostra o valor de &#8216;verified&#8217; nas listas de posts \u2013 como <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\">fizemos neste post<\/a>, e fica mais \u00fatil.<\/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=\"Tutorial: Como adicionar uma a\u00e7\u00e3o em massa personalizada no WordPress Admin\" ><\/a><\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nesta postagem, veremos como adicionar uma a\u00e7\u00e3o em massa personalizada ao administrador do WordPress &#8211; que pode ser adicionada \u00e0 lista de postagens, coment\u00e1rios, usu\u00e1rios e telas de plugins,<\/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":[898,898,722,722,920,1110,920,806,806,846,846,867,867],"tags":[1170],"class_list":["post-233554","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-outro","category-n-a","category-php-8","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=233554"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233554\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/221177"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=233554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=233554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=233554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}