{"id":233511,"date":"2023-02-16T18:01:00","date_gmt":"2023-02-16T15:01:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233511"},"modified":"2022-11-11T00:05:43","modified_gmt":"2022-11-10T21:05:43","slug":"tutorial-como-agregar-una-accion-masiva-personalizada-en-el-administrador-de-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/tutorial-como-agregar-una-accion-masiva-personalizada-en-el-administrador-de-wordpress\/","title":{"rendered":"Tutorial: C\u00f3mo agregar una acci\u00f3n masiva personalizada en el administrador de WordPress"},"content":{"rendered":"\n<p>Encima de la mayor\u00eda de las tablas de elementos en el administrador de WordPress (por ejemplo, publicaciones, p\u00e1ginas, comentarios, complementos y usuarios), encontrar\u00e1 la funcionalidad de WordPress para acciones masivas. Las acciones masivas le permiten marcar m\u00faltiples elementos, elegir una acci\u00f3n y hacer que esa acci\u00f3n se realice para todos los elementos a la vez. En esta publicaci\u00f3n, veremos c\u00f3mo agregar nuestras propias acciones masivas personalizadas al administrador de WordPress.<\/p>\n<p>Agregar una acci\u00f3n masiva personalizada se ha vuelto mucho m\u00e1s f\u00e1cil en las versiones recientes de WordPress (desde 4.7). Hay un filtro para las opciones disponibles en el men\u00fa desplegable; otro filtro para lo que debe hacer cuando se elige su opci\u00f3n, y otro gancho para mostrar opcionalmente un aviso de administrador. Repasemos cada uno de estos.<\/p>\n<h2>Agregar una acci\u00f3n masiva personalizada en el men\u00fa desplegable<\/h2>\n<p>Comencemos agregando nuestra opci\u00f3n masiva personalizada al men\u00fa desplegable de acciones masivas. Para esto, usamos el filtro <code>bulk_actions_&lt;screen&gt;<\/code>, donde reemplaza con la pantalla de administraci\u00f3n a la que desea que se agregue su opci\u00f3n. Aqu\u00ed hay una descripci\u00f3n completa de las posibles opciones para la pantalla:<\/p>\n<ul>\n<li><code>bulk_actions-edit-post<\/code>: Pantalla de edici\u00f3n de tipo de publicaci\u00f3n &#8216;publicaci\u00f3n&#8217;<\/li>\n<li><code>bulk_actions-edit-page<\/code>: Pantalla de edici\u00f3n de tipo de publicaci\u00f3n &#8216;p\u00e1gina&#8217;<\/li>\n<li><code>bulk_actions-edit-&lt;post-type-name&gt;<\/code>: Pantalla de edici\u00f3n de tipo de publicaci\u00f3n personalizada<\/li>\n<li><code>bulk_actions-edit-&lt;custom-taxonomy&gt;<\/code>: Pantalla de edici\u00f3n de taxonom\u00eda personalizada<\/li>\n<li><code>bulk_actions-edit-comments<\/code>: pantalla de lista de comentarios<\/li>\n<li><code>bulk_actions-plugins<\/code>: Pantalla de lista de complementos<\/li>\n<li><code>bulk_actions-users<\/code>: pantalla de lista de usuarios<\/li>\n<li><code>bulk_actions-upload<\/code>: Lista de la biblioteca de medios (solo funciona en la vista de lista, no en la vista de cuadr\u00edcula)<\/li>\n<\/ul>\n<p>El filtro se aplica a una matriz con pares clave-valor; donde las claves son una clave \u00fanica para las acciones y los valores son la etiqueta que aparece en el men\u00fa desplegable.<\/p>\n<p>Veamos un ejemplo. Quiero crear una acci\u00f3n masiva para configurar las publicaciones 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>Si guarda y actualiza la pantalla de edici\u00f3n de publicaciones, deber\u00eda ver su opci\u00f3n en el men\u00fa desplegable.<\/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: C\u00f3mo agregar una acci\u00f3n masiva personalizada en el administrador de WordPress\" ><\/a><\/p>\n<p>A partir de ahora, nuestra acci\u00f3n masiva personalizada est\u00e1 funcionando absolutamente. Ese es el siguiente paso.<\/p>\n<h2>Hacer que nuestra acci\u00f3n masiva personalizada haga algo<\/h2>\n<p>Para activar algo al elegir nuestra opci\u00f3n reci\u00e9n agregada en el dropwon, nos conectamos al filtro <code>handle_bulk_actions-&lt;screen&gt;<\/code>. Consulte la descripci\u00f3n general anterior para conocer los posibles valores de pantalla. Obviamente, su gancho de control debe ser la misma pantalla que la pantalla en la que agreg\u00f3 la acci\u00f3n masiva en el primer paso.<\/p>\n<p>Tienes tres argumentos posibles en este filtro. El primero, el que devuelve, es en realidad una URL a la que WordPress deber\u00eda redirigir despu\u00e9s de que haya terminado con su acci\u00f3n masiva. El segundo argumento es el nombre de la acci\u00f3n que se eligi\u00f3 en el men\u00fa desplegable. Y el tercero es una matriz de todos los ID de elementos que se verificaron para la acci\u00f3n masiva. Estos son los elementos sobre los que debemos aplicar nuestra acci\u00f3n.<\/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>Veamos lo que hace el c\u00f3digo anterior paso a paso. Primero, debemos verificar si la acci\u00f3n masiva realizada fue realmente nuestra acci\u00f3n personalizada; <code>change-to-published<\/code>. Y luego depende de nosotros hacer lo que queramos con todas las identificaciones.<\/p>\n<p>El c\u00f3digo anterior recorre todas las ID de publicaci\u00f3n y act\u00faa <code>wp_update_post()<\/code>en cada una para cambiar su estado de publicaci\u00f3n a publicado. (Si desea que esto sea eficiente, puede considerar actualizar solo aquellos que a\u00fan no est\u00e1n publicados).<\/p>\n<p>Una vez que hayamos terminado de realizar nuestra acci\u00f3n en los elementos seleccionados, debemos crear una URL para redirigir despu\u00e9s de que WordPress haya terminado. Agregamos un argumento personalizado a la URL de redireccionamiento proporcionada. Esto es opcional pero necesario si queremos mostrar un aviso de administrador. Podemos agregar lo que quieras. Pero en el ejemplo anterior, simplemente estamos agregando un nuevo argumento de consulta con <code>add_query_arg()<\/code>la configuraci\u00f3n &#8216; <code>changed-to-published<\/code>&#8216; para la cantidad de ID de publicaci\u00f3n que se vieron afectadas. Esta es informaci\u00f3n \u00fatil para un aviso.<\/p>\n<h2>Mostrar un aviso despu\u00e9s de que se haya realizado nuestra acci\u00f3n masiva personalizada<\/h2>\n<p>Si realiza nuestra acci\u00f3n masiva personalizada ahora, notar\u00e1 que despu\u00e9s de que WordPress haya completado la acci\u00f3n masiva, vuelve a cargar la p\u00e1gina con lo siguiente en la URL: &quot;wp-admin\/edit.php?changed-to-published=2&quot;. &quot;2&quot; es el n\u00famero de publicaciones en las que aplicamos nuestra acci\u00f3n. Esto nos permite agregar un aviso de administrador personalizado que se activa si se establece &#8216;cambiado a publicado&#8217;.<\/p>\n<p>Para mostrar los avisos de administraci\u00f3n, podemos usar la acci\u00f3n <code>admin_notices<\/code>. Verificamos la variable global de PHP <code>$_REQUEST<\/code>, que se completa con los valores enviados del formulario si &#8216; <code>changed-to-published<\/code>&#8216; existe. Si es as\u00ed, eso significa que nuestra acci\u00f3n masiva personalizada acaba de realizarse. Luego mostraremos un texto que incluye el n\u00famero de publicaciones 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>\u00a1Y eso es!<\/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: C\u00f3mo agregar una acci\u00f3n masiva personalizada en el administrador de WordPress\" ><\/a><\/p>\n<h2>Otros usos de la acci\u00f3n masiva personalizada<\/h2>\n<p>Tenga en cuenta que en el <code>handle_bulk_actions-&lt;screen&gt;<\/code>gancho puede hacer b\u00e1sicamente lo que quiera con los elementos seleccionados. Puede actualizar la meta de publicaci\u00f3n personalizada, cambiar los roles de los usuarios, enviar un correo electr\u00f3nico o publicar una solicitud HTTP en alguna aplicaci\u00f3n de terceros.<\/p>\n<p>Por ejemplo; si desea una acci\u00f3n masiva para actualizar una meta de publicaci\u00f3n personalizada que informe si las publicaciones est\u00e1n verificadas o no, use una acci\u00f3n masiva personalizada con la tecla &#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 lo anterior con una columna personalizada que muestre el valor de &#8216;verificado&#8217; en las listas de publicaciones, 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\">hicimos en esta publicaci\u00f3n<\/a>, y se vuelve muy \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: C\u00f3mo agregar una acci\u00f3n masiva personalizada en el administrador de WordPress\" ><\/a><\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En esta publicaci\u00f3n, veremos c\u00f3mo agregar una acci\u00f3n masiva personalizada al administrador de WordPress, que se puede agregar a la lista de publicaciones, comentarios, usuarios y pantallas de complementos.<\/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":[892,892,716,716,914,1110,914,800,800,840,840,861,861],"tags":[1172],"class_list":{"0":"post-233511","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-codigo","9":"category-desarrollador","11":"category-otro","12":"category-n-a","14":"category-php-2","16":"category-tutoriales","18":"category-wordpress-2","20":"tag-affiai-es"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=233511"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233511\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/221177"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}